泛型的Java反射

Her*_*rn. 4 java generics reflection

我正在使用Java Reflection在自定义eclipse工具中公开方法.

我正在编写getReturnType接受java.lang.reflect.Method输入并返回对象的方法Class<?>

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

此代码编译良好,但在运行时我得到了下面的异常而铸造TypeParameterizedType.

java.lang.ClassCastException:java.lang.Class无法强制转换为java.lang.reflect.ParameterizedType

请建议.谢谢!

Pau*_*ora 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());
}
Run Code Online (Sandbox Code Playgroud)

请注意,getGenericReturnType可能会返回更多可能的子接口Type,您需要以某种方式解释这些子接口,或者通过处理它们或者抛出运行时异常.

有关更多信息/示例,请参阅此文章.