在某些Java泛型转换中,类型安全警告的含义是什么?
时间:2020-03-05 18:37:20 来源:igfitidea点击:
Java警告的含义是什么?
Type safety: The cast from Object to List is actually checking against the erased type List
当我尝试将Object强制转换为具有通用信息的类型时,会收到此警告,例如以下代码:
Object object = getMyList(); List<Integer> list = (List<Integer>) object;
解决方案:
出现此警告是因为Java在运行时实际上并未在使用泛型的对象中存储类型信息。因此,如果"对象"实际上是"列表<String>",则在运行时将没有" ClassCastException",除非从列表中访问的项目与变量中定义的通用类型不匹配。
如果使用不正确的通用类型信息将项目添加到列表,则可能导致进一步的复杂性。现在,任何仍保留对列表的引用但具有正确的泛型类型信息的代码将具有不一致的列表。
要删除警告,请尝试:
List<?> list = (List<?>) object;
但是,请注意,我们将无法使用诸如add之类的某些方法,因为编译器不知道我们是否尝试添加错误类型的对象。上面的方法在很多情况下都可以使用,但是如果我们必须使用add或者类似的受限制方法,则只需在Eclipse中使用黄色下划线(或者" SuppressWarning"注释)。