gpt4 book ai didi

java - 有没有办法让泛型持续存在? [Java控制台]

转载 作者:行者123 更新时间:2023-12-01 12:33:15 26 4
gpt4 key购买 nike

我有这样的情况:我有一个基类

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-case 和 ifs,使用类似泛型的东西,因为将来用户将可以选择添加新类型,这可能会破坏 switch-case 或 if-else。

我做了很多研究并找到了反射(reflection)。还有其他方法吗?

谢谢!

最佳答案

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

关于java - 有没有办法让泛型持续存在? [Java控制台],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25778570/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com