当前位置: 首页 > 面试题库 >

无法对参数化类型ArrayList执行instanceof检查

上官恩
2023-03-14
问题内容

如下代码:

((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类型的信息,因此您无法进行instanceofof的操作ArrayList<Foo>。您可以显式“存储”参数化类型,并在那里进行比较。



 类似资料:
  • 问题内容: 有时需要检查Python中的参数。例如,我有一个函数可以接受网络中其他节点的地址作为原始字符串地址,也可以接受封装其他节点信息的类Node。 我使用type()函数,如下所示: 这是这样做的好方法吗? 更新1: Python 3具有函数参数的注释。可以使用以下工具将其用于类型检查:http ://mypy-lang.org/ 问题答案: 使用。样品:

  • 我想创建一个rest来在服务器和客户端之间进行通信。 下面给出的构造函数: 对于普通类型,我可以执行以下操作: 如何传递泛型类型,如: 以下代码无效: 我遇到一个运行时错误:无法强制转换为ParameteredType。

  • 我的意图是对进行简单的克隆,但在此之前,我在修改列表时遇到了一个问题。在列表中添加另一个元素 为什么?

  • 我面临泛型的问题。 下面是我使用泛型的一个类: 在这里,我们的类:使用进行参数化。 我想在我们的一种方法中指定类型,如下所示: 但是,我遇到以下编译器错误:

  • javac如何检查参数化类型?我找到了关于JVM规范的信息http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html#jvms-4.10.1但是关于泛型类型的信息在运行时不可用。或者检查类似于算法JVM的算法javac?请帮助我解决这个问题!