有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

有办法让泛型持久化吗?[Java控制台]

我有这样的情况: 我有一个基础班

public class Vehicle 
{
    private String atrb1;
    private String atrb2;
}

以及从中继承的一些类

public class Car extends Vehicle 
{
    private String anotheratrb1;
}

public class Bus extends Vehicle { ... }

public class Truck extends Vehicle { ... }

我正在做一个Java控制台应用程序,用户可以选择他想要注册的车辆类型,有没有办法获得他键入的车辆类型,并通过一个方法决定从车辆继承的哪个类将持久化银行?没有任何切换案例和ifs,使用类似泛型的东西,因为将来用户可以选择添加新类型,这可能会破坏一个切换案例,例如,if-else

我做了很多研究,发现了一些问题。还有别的办法吗

谢谢


共 (1) 个答案

  1. # 1 楼答案

    应要求,我附上一个例子。稍后,我想您可以扩展这个类以拥有更多的常量-只是不要忘记在static块中添加相应的行。还有一件事需要说明,下面是Java1.7。如果使用1.8,可以使用更优雅的解决方案,将Car::new传递给VehicleType构造函数,而不是传递Car.class

    enum VehicleType {
        CAR("car", Car.class),
        TRUCK("truck", Truck.class);
    
        private static Map<String, VehicleType> types = new HashMap<>();
    
        static {
            types.put(CAR.asString(), CAR);
            types.put(TRUCK.asString(), TRUCK);
        }
    
        private String str;
        private Class<? extends Vehicle> clazz;
    
        VehicleType(String str, Class<? extends Vehicle> clazz) {
            this.str = str;
            this.clazz = clazz;
        }
    
        static VehicleType of(String str) {
            return types.get(str);
        }
    
        @SuppressWarnings("unchecked")
        <T extends Vehicle> T createInstance() {
            try {
                return (T) this.clazz.newInstance();
            } catch (InstantiationException | IllegalAccessException e) {
                // there's no default constructor.
                return null;
            }
        }
    
        String asString() {
            return this.str;
        }
    }