泛型的 Java 反射

标签 java generics reflection

我正在使用 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/

相关文章:

asp.net - ASP.NET 是否使用反射来检查事件处理程序是否存在?

java - 错误导入库 JFreeChart (java)

java - Gson反序列化时失败 "understand"泛型类型

Java:有没有办法将文本转换为类?

swift - 为什么泛型元素在定义为 Double 时表现不同?

javascript - 如何让基本泛型类型知道 TypeScript 中的子泛型?

c# - 获取通用抽象类的属性名

java - 局部变量隐藏一个字段是什么意思?

java - 在java中解析来自RESTful服务的XML响应

java - 是否可以通过 Selenium 代码禁用 Firefox 插件