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

ddolor 发布于 2018-02-04 casting 最后更新 2018-02-04 01:00 1331 浏览

Java警告的含义是什么?

Type safety: The cast from Object to List is actually checking against the erased type List
当我尝试将对象转换为具有通用信息的类型时,出现此警告,如下面的代码所示:
Object object = getMyList();
List<Integer> list = (List<Integer>) object;
已邀请:

ddolor

赞同来自:

这个警告是因为Java实际上并不是在运行时在使用泛型的对象中存储类型信息。因此,如果object实际上是一个List<String>,那么在运行时将不会有ClassCastException,除非从列表中访问一个与变量中定义的泛型不匹配的项。 如果项目被添加到列表中,这会导致更多的复杂性,并带有这个不正确的泛型类型信息。任何代码仍然持有对列表的引用,但具有正确的通用类型信息现在将具有不一致的列表。 要删除警告,请尝试:

List<?> list = (List<?>) object;
但是,请注意,您将无法使用某些方法(如添加),因为编译器不知道您是否尝试添加不正确类型的对象。上面的代码可以在很多情况下使用,但是如果你必须使用add或者其他一些类似的限制方法,你只能在Eclipse中遇到黄色下划线(或者SuppressWarning注解)。