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