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