我必须在运行时捕捉类型。我无法弄清楚如何做到这一点。如何在运行时捕捉方法类型(generick类型)
棘手的地方是,这种类型是通用的。
代码片段:
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建议。
并添加到主():
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();
哪个应该返回类的类型什么都不返回。
有什么建议吗?
为什么你需要知道的类型? –
object.getClass()可以做到这一点,但它不一定会返回代码本身定义的类型,这会在编译类型中被擦除。无论如何,你可能有一个设计缺陷。尝试避免特定类型检查以确定您的流量。 –