2012-04-08 11 views
4

私はJava Reflectionを使用してカスタムEclipseツールでメソッドを公開しています。ジェネリックのためのJavaリフレクション

私は、入力としてjava.lang.reflect.Methodを受け入れ、このコードはうまくコンパイルClass<?>

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

のオブジェクトを返すメソッドgetReturnTypeを書いていますが、ParameterizedTypeTypeをキャストしながら、実行時に、私は以下の例外を取得します。

とjava.lang.ClassCastException:java.lang.Classのはお勧めしてください java.lang.reflect.ParameterizedType

にキャストすることはできません。ありがとう!

+0

getClass(type)が入力Typeオブジェクトのクラスを返すことを忘れてしまった –

答えて

8

getGenericReturnTypeの結果が常にParameterizedTypeになるとは想定できないため、これは機能しません。戻り値の型が一般的でない場合は時にはClassになることがあります。 getGenericReturnTypeはまたそれらを扱うか、実行時例外をスローすることによってどちらか、あなたが何らかの形で考慮する必要がありますTypeのより多くの可能なサブインターフェイスを返すことが

Type returnType = method.getGenericReturnType(); 

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

注:instanceofを使用して必要なものをどのように達成するかについては、この例を参照してください。

詳細/例については、this articleを参照してください。

関連する問題