Java 获取超级接口的类型参数

Java 获取超级接口的类型参数,java,generics,Java,Generics,我有: 但是in只知道T,不知道Clazz1。当你知道的时候 subInterface1.getInterfaces()[0].getTypeParameters()[0] 您将获得表示接口I的Class对象的第一个形式类型参数,它实际上是变量T。相反,你需要使用 subInterface1.getInterfaces()[0].getTypeParameters()[0] 获取表示已由I1扩展的I的特定实例化的Type对象。这将是ParameterizedType的一个实例,因此您可以转换

我有:

但是in只知道T,不知道Clazz1。

当你知道的时候

subInterface1.getInterfaces()[0].getTypeParameters()[0]
您将获得表示接口
I
Class
对象的第一个形式类型参数,它实际上是变量
T
。相反,你需要使用

subInterface1.getInterfaces()[0].getTypeParameters()[0]

获取表示已由
I1
扩展的
I
的特定实例化的
Type
对象。这将是
ParameterizedType
的一个实例,因此您可以转换为该实例,然后使用
getRawType()
getActualTypeArguments()
分别提取原始类型
I
和实际类型参数值
Clazz1
。请注意,
getActualTypeArguments()
的返回类型是
type[]
而不是
Class[]
,因为实际的参数可能不是具体的类,它们可能是变量或通配符(或者实际上是其他参数化类型,在
List
的情况下)。

我找到了解决方案:

subInterface1.getGenericInterfaces()[0]

谢谢我刚刚找到了类似的解决方案。看看我自己的答案。但是如果他们有一致的sequence,如何得到
Clazz1
的真正类型?
subInterface1.getInterfaces()[0].getTypeParameters()[0]
subInterface1.getGenericInterfaces()[0]
((ParameterizedType)subInterface1.getGenericInterfaces()[0]).getActualTypeArguments()[0]