我对SCJP进行模拟测试。我遇到两个不同的问题,声明为
ArrayList<Integer> arr = new ArrayList<Integer>();
和
ArrayList arr = new ArrayList();
1)这两者之间的差异是什么?
我的分析=&gt; 首先可以存储Integerand及其子类。第二个可以存储Object及其子类。
2)我们可以在没有&lt;&gt;的情况下制作对象任何泛型类?
答案 0 :(得分:2)
1)这两者之间的差异是什么?
你已经找到了自己的答案。我建议你深入Java documentation寻找细节......
2)我们可以在没有&lt;&gt;的情况下制作对象任何泛型类?
IMO,你应该总是使用第一种方法:
ArrayList<Integer> arr = new ArrayList<Integer>();
或更好
List<Integer> arr = new ArrayList<Integer>();
因为你向读者提出了清除你打算放入ArrayList的内容。
答案 1 :(得分:0)
1)这两者之间的差异是什么?
ArrayList<Integer> arr = new ArrayList<Integer>();
此列表存储整数类对象。
ArrayList arr = new ArrayList();
- 此列表是通用列表,它将存储所有类型的对象。
2)我们可以在没有&lt;&gt;的情况下制作对象任何通用类?
<>
是由Java 5
引入的泛型 泛型通过制造更多错误来增加代码的稳定性 在编译时可检测到。
当您在集合中添加对象时,如果您不知道集合所采用的对象类型,则它会变得容易出错。以及您必须从该集合中检索哪种类型的对象。
因此,使用泛型Read more about Generics
会更好答案 2 :(得分:0)
简短回答:ArrayList
没有&lt;&gt;基本上等同于ArrayList<?>
,这意味着List的内容类型在编译时是未知的。
由于运行时类型擦除,通用版本和非通用版本之间没有区别:它们只是包含对象的列表。
使用通用(带&lt;&gt;)版本获得的是编译器可以执行一些静态类型检查,确保您的代码至少在类型级别是正确的。
根据你的第二个问题,是的。您可以创建任何泛型类的非泛型版本,尽管这对于代码的清晰度和安全性通常都是一种不好的做法。