阅读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;