2013-07-05 49 views
2

給定java.lang.reflect.Method什麼是<?> #getTypeParameters()類的返回類型?

我可以打電話,

final Class<?> returnType = method.getReturnType(); 

但是,當我試着打getTypeParameters()與下面的語句,

final TypeVariable<Class<?>>[] typeParameters = returnType.getTypeParameters(); 

我得到一個編譯器錯誤。

required: java.lang.reflect.TypeVariable<java.lang.Class<?>>[] 
found: java.lang.reflect.TypeVariable<java.lang.Class<capture#1 of ?>>[] 

這句話有什麼不對?我剛跟着apidocs。

回答

2

代碼正在嘗試執行安全操作。

需要創建輔助方法,以便通過類型推斷來捕獲通配符。 編譯器無法確認正在插入列表中的對象的類型,併產生錯誤。發生這種類型的錯誤時,通常意味着編譯器認爲您將錯誤的類型分配給變量。出於這個原因,泛型被添加到Java語言中 - 在編譯時強制執行類型安全。

這裏是解釋相同的Java文檔參考。

http://docs.oracle.com/javase/tutorial/java/generics/capture.html

,而這將工作

final TypeVariable<?>[] typeParameters =returnType.getTypeParameters(); 
1

你應該嘗試

final Class<?> returnType = method.getReturnType(); 
final TypeVariable<?>[] typeParameters = returnType.getTypeParameters(); 
if (types.length > 0){ 
    // do something with every type... 
} 
1

取決於你需要什麼,你也可以使用

final TypeVariable<? extends Class<?>>[] typeParameters = returnType.getTypeParameters(); 
相關問題