无法对参数化类型ArrayList执行instanceof检查
问题内容:
如下代码:
((tempVar instanceof ArrayList<Foo>) ? tempVar : null);
原因:
无法
instanceof
对参数化类型执行检查ArrayList<Foo>
。请改用表格,ArrayList<?>
因为其他通用类型信息将在运行时删除
有人可以解释一下“进一步的通用类型信息将在运行时删除”的含义,以及如何解决此问题吗?
问题答案:
这意味着,如果您有任何已参数化的内容,例如List<Foo> fooList = new ArrayList<Foo>();
,泛型信息将在运行时删除。相反,这是JVM将看到的内容List fooList = new ArrayList();
。
这称为类型擦除。List
在运行时,JVM没有参数化的类型信息(在示例中)。
解决吗?由于JVM在运行时没有Parameterized类型的信息,因此您无法进行instanceof
of的操作ArrayList<Foo>
。您可以显式“存储”参数化类型,并在那里进行比较。