我有以下類獲取參數化類參數的類型?
public class MyClass<T> {
public Class<T> getDomainClass() {
GET THE CLASS OF T
}
}
我GOOGLE了這個問題,我能找到的告訴我使用getGenericSuperClass()的所有答案,但這種方法的問題是,我必須有一個第二類擴展MyClass,我不想這樣做。我需要的是獲取具體類的參數化類型?
我有以下類獲取參數化類參數的類型?
public class MyClass<T> {
public Class<T> getDomainClass() {
GET THE CLASS OF T
}
}
我GOOGLE了這個問題,我能找到的告訴我使用getGenericSuperClass()的所有答案,但這種方法的問題是,我必須有一個第二類擴展MyClass,我不想這樣做。我需要的是獲取具體類的參數化類型?
你不能。由於類型擦除,所需信息(即T的值)在運行時不可用。
如果你需要知道你可能不應該使用泛型的類型。
由於類型擦除,獲取它的唯一方法是將其作爲顯式參數傳遞 - 無論是在方法中,還是在構造函數中。
public class MyClass<T> {
public Class<T> getDomainClass(Class<T> theClass) {
// use theClass
}
}
我知道的唯一途徑:
public class MyClass<T> {
private Class<T> clazz;
public MyClass(Class<T> clazz) {
this.clazz = clazz;
}
public Class<T> getDomainClass() {
return clazz;
}
}
所以你基本上是提供運行時的信息,它不會從編譯器有。
如果您想獲得您繼承的通用類型,您可以這樣做!將此方法添加到您的課堂並獲利! ;)
public Class<?> getGenericType() {
Class result = null;
Type type = this.getClass().getGenericSuperclass();
if (type instanceof ParameterizedType) {
ParameterizedType pt = (ParameterizedType) type;
Type[] fieldArgTypes = pt.getActualTypeArguments();
result = (Class) fieldArgTypes[0];
}
return result;
}
您是否看到:http://stackoverflow.com/questions/1901164/get-type-of-a-generic-parameter-in-java-with-reflection? – Campa 2015-09-04 10:53:33