How to get a class instance of generics type T
考慮泛型類Foo<T>
,在其成員中,如果想獲取類型(type)T
的類實例(class instance of type T),是不可以直接調用 T.class
的。原因在於,Java 語言無法獲取泛型類型參數(T
)的運行時信息(不可以直接調用 T.class
)。
0. 常用解決方案
既然無法調用泛型類型參數的運行時類型信息,便在調用端,顯示地傳遞該類的運行時類型信息進去(通過構造函數),一種慣用的解決方案如下:
class Foo<T> {
private final Class<T> type;
public Foo<T>(Class<T> type) {
this.type = type;
}
public static void main(String[] args) {
// 在客戶端調用時,便會顯得有些啰嗦
Foo<SomeClass> f = new Foo<SomeClass>(SomeClass.class);
}
}