阅读ParameterizedType接口的文档后,我认为ParameterizedType实例的示例可以是任何参数化类型,例如我代码中的col:

  public class a0 {

     public static void main(String[] args) {

        Collection<String> col = new ArrayList<String>();
        col.add("a");
        col.add("b");
        col.add("c");

        assert col instanceof ParameterizedType; // line No. 10
     }
  }

但是我得到这个:
Exception in thread "main" java.lang.AssertionError
at a0.main(a0.java:10)

因此,ParameterizedType的实例可能是什么?

我想知道这一点,因为我试图理解一个更大的程序,其中包含这样的片段:
public static void printType(Type type) {
...
if (type instanceof ParameterizedType) {
... }
}

但是我不知道if语句中的条件何时成立。

最佳答案

ParameterizedType是代表参数化类型的反射类型。参数化类型本身不是该类的实例。

类似地, Field 实例用于表示某种类型的类成员字段。这并不意味着该字段将是Field的实例。
ParameterizedType的示例如下:

Type[] genericInterfaces = col.getClass().getGenericInterfaces();
Type type = genericInterfaces[0];

assert type instanceof ParameterizedType;

09-12 02:55