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

时间:2008-08-02 08:58:28

标签: java generics warnings casting type-safety

Java警告的含义是什么?

  

类型安全:从对象到列表的转换<整数>实际上正在检查已删除的类型列表

当我尝试将Object转换为具有通用信息的类型时,我收到此警告,例如在以下代码中:

Object object = getMyList();
List<Integer> list = (List<Integer>) object;

1 个答案:

答案 0 :(得分:50)

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

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

要删除警告,请尝试:

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

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