某些 Java 泛型强制转换中的类型安全警告的含义是什么?

What is the meaning of the type safety warning in certain Java generics casts?

提问人:Mike Stone 提问时间:8/2/2008 最后编辑:rgettmanMike Stone 更新时间:11/2/2021 访问量:10218

问:

Java 警告的含义是什么?

类型安全:从 Object 到 List<Integer> 的强制转换实际上是针对擦除的类型 List 进行检查

当我尝试将 Object 强制转换为具有泛型信息的类型时,我收到此警告,如以下代码所示:

Object object = getMyList();
List<Integer> list = (List<Integer>) object;
Java 泛型 警告强制 转换 类型安全

评论

1赞 Axel 1/15/2013
如果您想删除 Eclipse 中的黄色下划线,但又不想添加 ,您可以选择忽略首选项中的警告。在首选项窗口中,转到 Java > Compiler > Errors/Warnings,然后在 “Generic types”(泛型类型)部分下,将 “Unchecked generic type operation”(未选中的泛型类型操作)选项更改为 Ignore@SuppressWarning

答:

53赞 Mike Stone 8/2/2008 #1

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

如果将项添加到列表中,并且具有不正确的泛型类型信息,这可能会导致进一步的复杂情况。任何仍保留对列表的引用但具有正确泛型类型信息的代码现在都将具有不一致的列表。

要删除警告,请尝试:

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

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