对于以下代码:
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);
^
这两段代码都因输入无效而失败。那么为什么编译器会对第二段代码发出未经检查或不安全操作的警告?
最佳答案
Then why compiler is raising warning of unchecked or unsafe operation for second piece of code?
因为您正在分配 ArrayList
到类型为 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
// ...
}
关于java - 泛型类型的非泛型对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18101365/