我正在使用 Java 反射来公开自定义 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 cannot be cast to java.lang.reflect.ParameterizedType
请推荐。谢谢!
最佳答案
这不起作用,因为您不能假设 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
的更多可能的子接口(interface)您将需要以某种方式考虑这些问题,也可以通过处理它们或抛出运行时异常来解决。
参见 this article获取更多信息/示例。
关于泛型的 Java 反射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10066679/