我有:
interface I<T> {}
和
interface I1 extends I<Clazz1> {}
我还有I2,I3等,它扩展了I&lt; Clazz2&gt;,I&lt; Clazz3&gt;等
我不知道运行时的Clazz1。我怎么能得到这些信息?
我试过了:
subInterface1.getInterfaces()[0].getTypeParameters()[0]
但只知道T,而不是Clazz1。
答案 0 :(得分:2)
当你这样做时
subInterface1.getInterfaces()[0].getTypeParameters()[0]
您将获得表示接口Class
的{{1}}对象的第一个正式类型参数,它实际上是变量I
。相反,你需要使用
T
获取subInterface1.getGenericInterfaces()[0]
对象,表示已由Type
扩展的I
的特定实例化。这将是I1
的一个实例,因此您可以转换为该实例,然后使用ParameterizedType
和getRawType()
来提取原始类型getActualTypeArguments()
和实际分别为类型参数值I
。请注意,Clazz1
的返回类型是getActualTypeArguments()
而不是Type[]
,因为实际参数可能不是具体类,它们可能是变量或通配符(或者实际上是其他参数化类型,在一个案例中)例如Class[]
)。
答案 1 :(得分:1)
我找到了解决方案:
((ParameterizedType)subInterface1.getGenericInterfaces()[0]).getActualTypeArguments()[0]