4

我正在使用 Java 反射来公开自定义 eclipse 工具中的方法。

我正在编写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

请建议。谢谢!

4

1 回答 1

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,您需要以某种方式对其进行处理,或者通过同时处理它们或抛出运行时异常。

有关更多信息/示例,请参阅本文

于 2012-04-08T23:21:42.143 回答