java - 如何检索泛型类型的类型参数?

标签 java reflection

假设我有一个 ParameterizedType具有特定类型:Container<Integer> , 我怎样才能从中得到非特定类型:Container<E> .

我希望能够匹配类型参数 E及其具体值(value)Integer .

澄清一下,我对从 Container<Integer> 中获取 Int 的常见问题不感兴趣。字段。

最佳答案

这可能比描述的更棘手,因为类型变量也可能来自层次结构中的任何位置,并且变量索引可以在每个级别轻松更改。例如:

interface Container<E, T> {
}

//Notice how E, T became T, E, so indices can not be trusted
interface SubContainer<E, T> extends Container<T, E> {
}

这意味着您需要遍历层次结构并收集每个级别的变量。

我建议你使用 GeAnTyRef对于类似的场景,因为它已经处理了复杂性(并且可能已经有办法在不自己进行变量解析的情况下完成您想要的事情):

Type resolved = new TypeToken<Container<Integer>>(){}.getType(); //or get the instance in any way you already do    
TypeVariable variable = Container.class.getTypeParameters()[0];

GenericTypeReflector.getTypeParameter(resolved, variable); //Gets you Integer

披露:我是 GeAnTyRef 库的维护者

关于java - 如何检索泛型类型的类型参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42675421/

相关文章:

java - 点式 Java JAR 命名约定

java - switch 语句中的最终变量大小写

c# - 如何将方法注入(inject) .Net Framework 中的自动属性

java - 数据库更新后出现 ORA-01733(此处不允许使用虚拟列)

java - Maven systemPath 依赖项未添加到 list 中的类路径

c# - 什么时候使用反射?模式/反模式

reflection - Powershell 是否具有 "eval"等效项?有没有更好的方法来查看属性和值的列表?

c# - 获取强类型方法的名称

java - Java Reflection如何动态生成方法调用者类的新实例?

java - JPA 为什么返回 2 个对象的查询不起作用而返回 1 个对象的查询工作正常