4

Java Reflection を使用して、カスタム Eclipse ツールでメソッドを公開しています。

getReturnType入力として受け入れjava.lang.reflect.Methodてオブジェクトを返すメソッドを書いていますClass<?>

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

このコードはうまくコンパイルされますが、実行時に へのキャスト中に以下の例外が発生しTypeますParameterizedType

java.lang.ClassCastException: java.lang.Class は java.lang.reflect.ParameterizedType にキャストできません

提案してください。ありがとう!

4

1 に答える 1

8

getGenericReturnTypeの結果が常に であると想定できないため、これは機能しませんParameterizedTypeClass戻り値の型がジェネリックでない場合、単に a になることがあります。を使用して必要なものを達成する方法については、この例を参照してくださいinstanceof

Type returnType = method.getGenericReturnType();

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

それらを処理するか、実行時例外をスローすることにより、何らかの方法で説明する必要があるgetGenericReturnType可能性のあるサブインターフェイスが返される可能性があることに注意してください。Type

詳細/例については、この記事を参照してください。

于 2012-04-08T23:21:42.143 に答える