Java 未选中的转换警告与泛型类型的引用

Java 未选中的转换警告与泛型类型的引用,java,Java,嗨,我在学习卡普兰自测题和答案。关于未经检查的转换警告,我真的坚持一种解释。它说 以下语句不会生成未选中的转换警告: ArrayList list=new ArrayList() 但在下一段中,它指出 以下语句将生成未选中的警告: List arrayList = new ArrayList<>(); arrayList.add("First"); arrayList.add("Second"); ... taman\diamond.java:29: warning: [unche

嗨,我在学习卡普兰自测题和答案。关于未经检查的转换警告,我真的坚持一种解释。它说

以下语句不会生成未选中的转换警告:

ArrayList list=new ArrayList()

但在下一段中,它指出

以下语句将生成未选中的警告:

List arrayList = new ArrayList<>();
arrayList.add("First");
arrayList.add("Second");
... taman\diamond.java:29: warning: [unchecked] unchecked call to add(E) as a member of the
raw type ArrayList
arrayList.add("First");
where E is a type-variable:
E extends Object declared in class ArrayList
... \taman\diamond.java:30: warning: [unchecked] unchecked call to add(E) as a member of the raw type ArrayList arrayList.add("Second");
where E is a type-variable:
E extends Object declared in class ArrayList
2 warnings
ArrayList list=new ArrayList()//生成转换警告

我在eclipse中进行了检查,它给出了以下警告消息

ArrayList是原始类型。对泛型类型ArrayList的引用应参数化

有人能帮我吗?是打字错误还是我遗漏了什么。 提前谢谢

编辑 我想我没有正确地解释我的问题。实际上,我在寻找的是“回答这样一个问题的正确答案是什么,例如ArrayList=new ArrayList();生成未经检查的转换。真/假。”因为在Kaplan自检中给出了两个不同的语句,我有点不知所措,虽然当我在Eclipse中尝试该代码时,它不会生成未经检查的转换警告,但它提供了泛型类型的引用。。警告因此,我正在寻求你的建议/建议。再次表示感谢


首先:这是一个警告,如果你小心的话,你可能会忽略它,你的代码仍然可以编译和运行得很好

但是,既然您想摆脱它,那么在定义它时应该给
ArrayList
一个类型

ArrayList<Type> list = new ArrayList<>();
ArrayList list=new ArrayList();

此类型可以是任何类,但不能是基元。如果您需要原语,请使用Java提供的包装类。

JDK7:使用菱形运算符进行构造函数类型推断

ArrayList<Type> list = new ArrayList<>();
如果按以下方式指定数据类型,则这些警告将消失:

List<String> arrayList = new ArrayList<>();
List arrayList=new arrayList();

您所说的是泛型类型

在Java1.6中,可以将构造函数与泛型一起使用,如下所示

ArrayList<String> list = new ArrayList<String>();
ArrayList<String> consumeLinks = new ArrayList<>();
没有办法限制类型。因此引入了泛型

尽管您仍然可以这样做,但泛型使您的代码更加可靠 因为它们为编译器提供了一种防止误用ArrayList的方法。 如果试图将Integer对象放入ArrayList中 如果保留字符串对象,编译器将失败并出现错误


我想这会有帮助。

除了第二条语句中的尾随注释外,这两条注释完全相同。因此,它们都会产生相同的行为也就不足为奇了,在这种情况下,警告确实会产生相同的行为,但我对解释感到困惑。在第一条语句中,它声明不会生成未经检查的转换警告,但在下一条语句中,它声明将生成未经检查的警告。所以我真的很困惑哪一个应该是正确的答案,尽管Eclipse生成“引用泛型…”警告而不是转换警告。我真的需要理解它来回答考试问题。在Java 7之前的代码中,这看起来是这样的:
ArrayList list=new ArrayList()
,如果这对你有帮助的话。我知道如何摆脱这个警告。我试着理解它来回答考试问题。例如ArrayList=newArrayList();“生成转换警告”真/假?。我对ArrayList=new ArrayList()的两个不同语句感到困惑;在解释中,它声明不会生成转换警告,然后在下一个语句中,它声明将生成转换警告,因此我有点不知所措不会生成警告<代码>ArrayList list=新建ArrayList()将。
ArrayList list = new ArrayList();