我必須在運行時捕捉類型。我無法弄清楚如何做到這一點。如何在運行時捕捉方法類型(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()可以做到這一點,但它不一定會返回代碼本身定義的類型,這會在編譯類型中被擦除。無論如何,你可能有一個設計缺陷。嘗試避免特定類型檢查以確定您的流量。 –