有一种方法可以制作通用的持久性吗? [Java控制台]

时间:2014-09-11 03:29:15

标签: java generics console

我遇到这种情况: 我有一个基类

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控制台应用程序,用户可以选择他想要注册的车辆类型,有没有办法获得他输入的车辆类型,并通过一种方法来决定从车辆继承哪个类别会坚持银行吗?没有任何switch-cases和ifs,使用类似泛型的东西,因为将来用户可以选择添加新类型,这可以打破switch-case或if-else例如。

我做了很多研究并发现了反思。还有另一种方法吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

根据要求,我附上一个例子。后来我认为你可以扩展这个类以获得更多的常量 - 只是不要忘记在static块中添加相应的行。还有一点需要评论,下面是Java 1.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;
    }
}