在某些Java泛型演员中,类型安全警告的含义是什么?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (20)

Java警告的含义是什么?

类型安全性:从对象到列表的转换实际上是针对已擦除类型列表进行检查

当我尝试将对象转换为具有通用信息的类型时,会出现此警告,如下面的代码所示:

Object object = getMyList();
List<Integer> list = (List<Integer>) object;
提问于
用户回答回答于

这个警告是因为Java实际上并不是在运行时在使用泛型的对象中存储类型信息。因此,如果object实际上是a List<String>ClassCastException除非从列表中访问的项目与变量中定义的泛型类型不匹配,否则在运行时不会有。

如果项目被添加到列表中,这会导致进一步的复杂性,并带有不正确的通用类型信息。任何代码仍然保持对列表的引用,但具有正确的通用类型信息现在将具有不一致的列表。

要删除警告,请尝试:

List<?> list = (List<?>) object;

但是,请注意,您将无法使用某些方法,例如添加,因为编译器不知道您是否尝试添加不正确类型的对象。上面的代码可以在很多情况下工作,但是如果你必须使用add或者其他类似的限制方法,你只需要忍受Eclipse中的黄色下划线(或者SuppressWarning注释)。

扫码关注云+社区