2010-10-27 189 views
0

是否有可能像在下面的代碼片段中那樣在Java中實例化通用對象?我知道這是可能的在C#中。但是,我還沒有在Java中看到類似的機制。在Java中實例化通用對象

// Let T be a generic type. 
T t = new T(); 

在此先感謝。

+1

可能重複:http://stackoverflow.com/questions/1090458/instantiating-a-generic-class-in-java – Mike 2010-10-27 13:09:01

+0

@Mike喬恩斯基特的無處不在:) – 2010-10-27 13:14:21

回答

8

不,由於類型擦除,這在Java中不起作用。代碼執行時,代碼不知道什麼是T

查看Java Generics FAQ有關Java泛型的更多信息比您想要的更多:) - 特別是,請參閱Type Erasure部分。

如果你需要知道的T在執行時的類型,對於這種或其他原因,你可以將其存儲在Class<T>,並把它在構造函數中:

private Class<T> realTypeOfT; 

public Foo(Class<T> clazz) { 
    realTypeOfT = clazz; 
} 

然後,您可以撥打newInstance()

3

恐怕不是。 Java中的泛型類型被刪除 - 它們在編譯時使用,但不在運行時使用(這在實際中非常方便)。

你可以做的是從Class對象中創建一個新的實例。

Class<T> myClass; 
T t = myClass.newInstance();