代码之家  ›  专栏  ›  技术社区  ›  Xolve

这个错误描述是什么意思?

  •  1
  • Xolve  · 技术社区  · 15 年前

    在Java中编译程序时,我得到了这个巨大的警告。

    警告:[unchecked]未选中的调用 LinkedList(Java.UTI.Cub)作为原始成员 键入java.util.LinkedList

    在这条线上:

    LinkedList<Integer> li2 = new LinkedList(li);
    

    这个警告是什么意思?

    编辑:

    应该是事实: LinkedList<Integer> li2 = new LinkedList<Integer>(li);

    但如果你能回答这个问题的话。

    2 回复  |  直到 15 年前
        1
  •  3
  •   polygenelubricants    15 年前

    未选中原始类型。使用

    LinkedList<Integer> li2 = new LinkedList<Integer>(li);
    

    在新代码中不应使用原始类型。它只为 向后的 兼容性原因。见 JLS 4.8

    为了方便与非通用遗留代码的接口,还可以使用参数化类型(4.5)的擦除(4.6)作为类型。这种类型称为原始类型。

    只允许使用原始类型作为对遗留代码兼容性的让步。在引入泛型到Java编程语言之后编写的代码中使用原始类型是非常令人沮丧的。 Java编程语言的未来版本不允许使用原始类型。

    重点是他们的,不是我的。


    您对原始问题添加了一个更正,这意味着您希望特别使用原始类型。这似乎违背了泛型提供的类型安全性的目的,但是您可以始终使用 List<Object> 为了实现这一点。它不再是生的,所以它保证在未来工作,虽然它真的没有给你任何类型的安全。

    根据上下文的不同,您也可以 List<?> 对于无限通配符。

        2
  •  0
  •   Joachim Sauer    15 年前

    LinkedList当您像这样调用构造函数时:

    LinkedList<Integer> li2 = new LinkedList<Integer>(li);
    

    原始类型是具有类型参数但在使用时不带参数的类型。由于遗留的原因支持它,但是您不应该在新代码中使用它。