有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我有:

interface I<T> {}

以及:

interface I1 extends I<Clazz1> {}

我还有I2、I3等扩展I<;CLAZ2>;,我<;CLAZ3>;等等

我不知道运行时Clazz1的情况。我怎样才能得到这个信息

我试过:

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

但in只知道T,不知道Clazz1


共 (2) 个答案

  1. # 1 楼答案

    我找到了解决方案:

    ((ParameterizedType)subInterface1.getGenericInterfaces()[0]).getActualTypeArguments()[0]
    
  2. # 2 楼答案

    当你这样做的时候

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

    您将获得表示接口IClass对象的第一个形式类型参数,它实际上是变量T。相反,你需要使用

    subInterface1.getGenericInterfaces()[0]
    

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