0

对于以下代码:

ArrayList<String> ar = new ArrayList<String>();
ar.add(45);

ArrayList<String> ar = new ArrayList();
ar.add(45);

我在行ar.add(45)中遇到编译时错误:

cannot find symbol
symbol  : method add(int)
location: class java.util.ArrayList<java.lang.String>
                al.add(45);
                  ^

这两段代码都因输入无效而失败。那么为什么编译器会针对第二段代码发出未经检查或不安全操作的警告?

4

4 回答 4

5

那么为什么编译器会针对第二段代码发出未经检查或不安全操作的警告?

因为您将 分配给ArrayListtype 的变量ArrayList<String>。这意味着虽然编译器将强制期望数组列表仅在您通过 引用该列表时包含字符串ar,但它不能确定您没有对您将使用的非参数化的其他ArrayList引用向其中添加非字符串,如下所示:

ArrayList anythingGoes = new ArrayList();
ArrayList<String> onlyStrings = anythingGoes; // Unchecked/unsafe op
anythingGoes.add(new Date());
for (String s : onlyStrings) { // Blows up
    // ...
}
于 2013-08-07T10:47:41.467 回答
2

因为在第二个代码中您没有指定 ArrayList 的类型参数。您可以在 Java 7 中将其编写为:

ArrayList<String> ar = new ArrayList<>();
于 2013-08-07T10:47:58.393 回答
0

这里有两个不同的问题。

首先 -

ArrayList<String> ar = new ArrayList();

您告诉编译器这ar是一个字符串列表,但您将其分配给原始类型列表(即无界)。因此,编译器会警告您未经检查或不安全的操作。您应该使用以下任一选项:

ArrayList<String> ar = new ArrayList<String>();

或者

ArrayList<String> ar = new ArrayList<>();

(第二个选项是 Java 7 示例,它只是减少了您必须做的输入量。结果是相同的)。

第二 -

ar.add(45);

您正在将一个整数 (45) 添加到字符串列表中。编译器不允许你这样做。

于 2013-08-07T10:51:16.183 回答
0

将您的通用数据类型更改为整数

如果你想添加整数

于 2013-08-07T10:58:27.110 回答