某些 Java 泛型强制转换中类型安全警告的含义是什么?
-
08-06-2019 - |
题
的含义是什么 Java警告?
类型安全:从 Object 到 List<Integer> 的转换实际上是针对擦除类型 List 进行检查
当我尝试将对象转换为具有通用信息的类型时,我收到此警告,例如以下代码:
Object object = getMyList();
List<Integer> list = (List<Integer>) object;
解决方案
出现此警告是因为 Java 在运行时实际上并未将类型信息存储在使用泛型的对象中。因此,如果 object
实际上是一个 List<String>
, , 将没有 ClassCastException
在运行时,除非从列表中访问与变量中定义的泛型类型不匹配的项目。
如果使用不正确的通用类型信息将项目添加到列表中,这可能会导致进一步的复杂化。任何仍然保留对列表的引用但具有正确的泛型类型信息的代码现在将具有不一致的列表。
要删除警告,请尝试:
List<?> list = (List<?>) object;
但是,请注意,您将无法使用某些方法(例如 add),因为编译器不知道您是否尝试添加类型不正确的对象。上面的方法在很多情况下都有效,但是如果您必须使用 add 或一些类似的限制方法,您将不得不忍受 Eclipse 中的黄色下划线(或 SuppressWarning
注解)。
不隶属于 StackOverflow