2008-08-02 33 views
61

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

类型安全:从Object演员到列表实际上是检查对删除类型列表

我得到这样的警告时,我尝试投的对象与一般信息的类型,如以下代码:

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

如果你想摆脱Eclipse中的黄色下划线,但不想添加@ @ SuppressWarning,你可以选择忽略首选项中的警告。在首选项窗口中,转至_Java> Compiler> Errors/Warnings_,然后在_Generic types_部分下,将选项** Unchecked generic type operation **更改为** Ignore ** – Axel 2013-01-15 10:28:37

回答

50

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

如果将项目添加到列表中,并使用此不正确的通用类型信息,可能会导致更多复杂情况。任何代码仍然持有列表的引用,但具有正确的通用类型信息现在将具有不一致的列表。

要删除的警告,请尝试:

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

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