2012-04-08 90 views
4

我正在使用Java反射來公開自定義eclipse工具中的方法。泛型的Java反射

我寫方法getReturnType它接受java.lang.reflect.Method作爲輸入,並返回Class<?>

private static Class<?> getReturnType(Method method) { 
    Type type = ((ParameterizedType)method.getGenericReturnType()).getRawType(); 
    return getClass(type); 
} 

此代碼編譯好對象,但在運行時我得到了下面的異常而鑄造TypeParameterizedType

java.lang.ClassCastException:java.lang.Class中不能轉換到 java.lang.reflect.ParameterizedType

請建議。謝謝!

+0

忘了提及getClass(type)返回輸入Type對象的類 2012-04-08 21:32:23

回答

8

這不起作用,因爲您不能假設getGenericReturnType的結果將始終爲ParameterizedType。如果返回類型不是通用的,有時它只是Class。見這個例子如何實現則需要使用什麼instanceof

Type returnType = method.getGenericReturnType(); 

if (returnType instanceof Class<?>) { 
    return (Class<?>)returnType; 
else if(returnType instanceof ParameterizedType) { 
    return getClass(((ParameterizedType)returnType).getRawType()); 
} 

注意getGenericReturnType可以返回Type更可能的子接口,您將需要考慮以某種方式,無論是處理起來也還是拋出一個運行時異常。

請參閱this article瞭解更多信息/示例。