80

Java 警告的含义是什么?

类型安全:从 Object 到 List<Integer> 的转换实际上是在检查擦除的类型 List

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

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

1 答案 1

54

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

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

要删除警告,请尝试:

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

但是,请注意,您将无法使用某些方法,例如 add,因为编译器不知道您是否尝试添加不正确类型的对象。上面的方法在很多情况下都有效,但如果你必须使用 add 或一些类似的受限方法,你将不得不在 Eclipse 中遇到黄色下划线(或SuppressWarning注释)。

于 2008-08-02T08:58:48.430 回答