我必须在运行时捕获一些类型。我无法弄清楚如何做到这一点。
棘手的地方是这种类型是通用的。
代码 代码段
public class Ship<T> {
private ArrayList<T> passangers = new ArrayList<T>();
public Ship(ArrayList<T> passangers) {
this.passangers = passangers;
}
public void addPassanger(T object) {
passangers.add(object);
}
// ... rest of class
}
如何在运行时捕获方法addPassanger(T object)
中的哪种类型。
抓住这种T
。
更新
我按照dasblinkenlight建议。
并添加到main():
Ship<Droid> victoria = new Ship<Droid>(new ArrayList<Droid>(), Droid.class);
victoria.addPassanger(new Droid("Christofor Columb"));
victoria.addPassanger(new Droid("Fernando Magelan"));
victoria.addPassanger(new Droid("James Kuk"));
System.out.print("Passengers type is:");
victoria.getPassengerType();
System.out.println();
victoria.showPassangers();
但输出是下一个:
Passengers type is:
At the sheep are presented:
1 Christofor Columb
2 Fernando Magelan
3 James Kuk
这里一行:
victoria.getPassengerType();
应返回类型返回任何内容。
有什么建议吗?
答案 0 :(得分:4)
由于类型擦除,运行时类型信息消失了。这里的常见技巧是在构造函数中存储Class
T
,如下所示:
public class Ship<T> {
private final Class<T> passengerType;
private ArrayList<T> passengers = new ArrayList<T>();
public Sheep(ArrayList<T> passengers, Class<T> passengerType) {
this.passengers = passengers;
this.passengerType = passengerType;
}
public void addPassenger(T object) {
passengers.add(object);
}
// ... rest of class
}