无法对参数化类型 ArrayList<Foo 执行实例检查>
下面的代码:
((tempVar instanceof ArrayList<Foo>) ? tempVar : null);
原因:
无法对参数化类型 执行检查。请改用表单,因为将在运行时擦除其他泛型类型信息
instanceof
ArrayList<Foo>
ArrayList<?>
有人可以解释一下“进一步的泛型类型信息将在运行时被删除”是什么意思以及如何解决这个问题?
下面的代码:
((tempVar instanceof ArrayList<Foo>) ? tempVar : null);
原因:
无法对参数化类型 执行检查。请改用表单,因为将在运行时擦除其他泛型类型信息
instanceof
ArrayList<Foo>
ArrayList<?>
有人可以解释一下“进一步的泛型类型信息将在运行时被删除”是什么意思以及如何解决这个问题?
这意味着,如果您有任何参数化的内容,例如,泛型信息将在运行时被删除。相反,这是JVM将看到的。List<Foo> fooList = new ArrayList<Foo>();
List fooList = new ArrayList();
这称为类型擦除。JVM 在运行时没有(在示例中)的参数化类型信息。List
修复?由于 JVM 在运行时没有参数化类型的信息,因此您无法执行 .您可以显式“存储”参数化类型并在那里进行比较。instanceof
ArrayList<Foo>
您始终可以执行此操作
try
{
if(obj instanceof ArrayList<?>)
{
if(((ArrayList<?>)obj).get(0) instanceof MyObject)
{
// do stuff
}
}
}
catch(NullPointerException e)
{
e.printStackTrace();
}