是否有可能像在下面的代碼片段中那樣在Java中實例化通用對象?我知道這是可能的在C#中。但是,我還沒有在Java中看到類似的機制。在Java中實例化通用對象
// Let T be a generic type.
T t = new T();
在此先感謝。
是否有可能像在下面的代碼片段中那樣在Java中實例化通用對象?我知道這是可能的在C#中。但是,我還沒有在Java中看到類似的機制。在Java中實例化通用對象
// Let T be a generic type.
T t = new T();
在此先感謝。
不,由於類型擦除,這在Java中不起作用。代碼執行時,代碼不知道什麼是T
。
查看Java Generics FAQ有關Java泛型的更多信息比您想要的更多:) - 特別是,請參閱Type Erasure部分。
如果你需要知道的T
在執行時的類型,對於這種或其他原因,你可以將其存儲在Class<T>
,並把它在構造函數中:
private Class<T> realTypeOfT;
public Foo(Class<T> clazz) {
realTypeOfT = clazz;
}
然後,您可以撥打newInstance()
等
恐怕不是。 Java中的泛型類型被刪除 - 它們在編譯時使用,但不在運行時使用(這在實際中非常方便)。
你可以做的是從Class對象中創建一個新的實例。
Class<T> myClass;
T t = myClass.newInstance();
可能重複:http://stackoverflow.com/questions/1090458/instantiating-a-generic-class-in-java – Mike 2010-10-27 13:09:01
@Mike喬恩斯基特的無處不在:) – 2010-10-27 13:14:21