java获取超级接口的类型参数
我有:
interface I<T> {}
以及:
interface I1 extends I<Clazz1> {}
我还有I2、I3等扩展I<;CLAZ2>;,我<;CLAZ3>;等等
我不知道运行时Clazz1的情况。我怎样才能得到这个信息
我试过:
subInterface1.getInterfaces()[0].getTypeParameters()[0]
但in只知道T,不知道Clazz1
你可以在下面搜索框中键入要查询的问题!
我有:
interface I<T> {}
以及:
interface I1 extends I<Clazz1> {}
我还有I2、I3等扩展I<;CLAZ2>;,我<;CLAZ3>;等等
我不知道运行时Clazz1的情况。我怎样才能得到这个信息
我试过:
subInterface1.getInterfaces()[0].getTypeParameters()[0]
但in只知道T,不知道Clazz1
# 1 楼答案
我找到了解决方案:
# 2 楼答案
当你这样做的时候
您将获得表示接口
I
的Class
对象的第一个形式类型参数,它实际上是变量T
。相反,你需要使用获取
Type
对象,该对象表示I
的特定实例化,该实例化已被I1
扩展。这将是ParameterizedType
的一个实例,因此您可以强制转换为该实例,然后使用getRawType()
和getActualTypeArguments()
分别提取原始类型I
和实际类型参数值Clazz1
。注意getActualTypeArguments()
的返回类型是Type[]
而不是Class[]
,因为实际参数可能不是具体的类,它们可以是变量或通配符(或者实际上是其他参数化类型,在List<List<String>>
的情况下)