java - 泛型类型的非泛型对象

标签 java generics

对于以下代码:

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/

相关文章:

Java-线程池

java - 如何分配在 if else 语句中定义的变量

java: Comparator 和 Treeset 去除重复项

java - gradle守护进程的高内存使用率

java - 在 Guice 中注入(inject)通用工厂

Java Swing - 如何使用泛型在 Swing 组件上创建实用程序类

typescript - 编写一个在泛型上使用查找类型的函数

java - 编辑 JFrame 中的现有图像

c# - C#泛型方法中的转换问题

visual-studio - C# 如何使用 IEnumerator 创建通用列表集合