Java 反射 : Get concrete type of implemented generic interface

标签 java generics reflection

假设我有一个像下面这样的类

public class AtomEntryHandler implements ConsumingHandler<AtomEntry>
{
...
}

是否可以从 AtomEntryHandler.class 的类对象中获取类对象 AtomEntry.class ?

由于删除,我认为这是不可能的,但 friend 说是。

最佳答案

您可以获得接口(interface)和直接子类的通用类型,但仅限于具体实现。例如,如果您有一个 List<T>例如,由于类型删除,您无法知道它被参数化为什么。如果类定义包含编译时已知的参数化类型(例如 class StringList extends List<String>),那么您可以检索该信息。

ParameterizedType pt = (ParameterizedType)AtomEntryHandler.class.getGenericInterfaces()[0];
Class atomEntryClass = (Class)pt.getActualTypeArguments()[0];

关于Java 反射 : Get concrete type of implemented generic interface,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7844610/

相关文章:

c# - 从 Action<T> 的实例中获取 Invoke MethodInfo 的最安全方法

c# - 将属性值与反射进行比较

java - Android 应用程序在运行时不会停止崩溃,ParseInt 出现问题

java - 使用唯一键提取关联的 JSON 数据

c# - 使用带有泛型的基类创建类型的实例

java - 为什么迭代接收到的通用 HashMap 只能通过增强的 for 循环来完成?

c# - 如何使表达式将值类型视为引用类型?

java - java.lang.reflect.Proxy 实例是否经过特殊处理以进行终结?

使用 Maven 将 Java 应用程序部署到 heroku 失败

java - 正确分配泛型变量