代码之家  ›  专栏  ›  技术社区  ›  Mike Stone

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

  •  65
  • Mike Stone  · 技术社区  · 16 年前

    这是什么意思 爪哇警告 ?

    类型安全:从对象到列表的转换实际上是根据已擦除的类型列表进行检查。

    当我尝试将对象强制转换为具有泛型信息的类型时,会收到此警告,例如在以下代码中:

    Object object = getMyList();
    List<Integer> list = (List<Integer>) object;
    
    1 回复  |  直到 9 年前
        1
  •  51
  •   Insane Skull    9 年前

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

    如果使用不正确的泛型类型信息将项添加到列表中,这可能会导致进一步的复杂性。任何仍然包含对列表的引用但具有正确的泛型类型信息的代码现在都将具有不一致的列表。

    要删除警告,请尝试:

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

    但是,请注意,您将无法使用某些方法(如add),因为编译器不知道您是否试图添加不正确类型的对象。上面的方法在很多情况下都可以使用,但是如果您必须使用add或者类似的限制方法,那么您只需要在eclipse中使用黄色下划线(或者 SuppressWarning 注释)。