Amb*_*rix 8 java generics arraylist
我目前正在攻读Java OCA考试,并遇到了一个与ArrayList声明有关的问题.
以下哪项有效?:
Run Code Online (Sandbox Code Playgroud)1. ArrayList al1 = new ArrayList(); 2. ArrayList al2 = new ArrayList<>(); 3. ArrayList<> al3 = new ArrayList<>(); 4. ArrayList<Double> al4 = new ArrayList<>(); 5. ArrayList<Double> al5 = new ArrayList<Float>();
根据我的书,答案1,2和4是有效的.答案3和5无效.
但是,没有给出适当的解释.它所做的就是显示声明ArrayList的标准方法:
ArrayList<E> al3 = new ArrayList<E>();
Run Code Online (Sandbox Code Playgroud)
并且提到声明没有通用部分的ArrayList也是有效的.
我也无法在网上找到关于这个主题的好文章.有人可以解释(或指向一篇好文章的方向)上面的不同排列吗?
提前致谢.
cow*_*wls 14
1在所有Java版本中都有效
在这里,您在不使用泛型的情况下声明ArrayList.这意味着无论你添加到arraylist中的是什么,当你将它取回时它将是类型Object并且需要转换为类型.这是在Java 1.4(pre generics)中使用Collections的旧方法,并且支持向后兼容性.现在你应该总是使用泛型.
2和4仅在Java 7中有效
空括号:<>是Java7的新类型推断,这意味着您不必两次指定类型.注意Java7,它不适用于旧版本.
所以在Java7中
ArrayList<Double> al4 = new ArrayList<>();
Run Code Online (Sandbox Code Playgroud)
是相同的
ArrayList<Double> al4 = new ArrayList<Double>();
Run Code Online (Sandbox Code Playgroud)
此链接有关于类型推断的更多信息:http://docs.oracle.com/javase/tutorial/java/generics/genTypeInference.html
3无效,因为如果使用泛型,则必须在变量声明中指定类型.
5是无效的,因为如果您声明一个类型为Double的List,则无法为其指定一个类型为Float的List,您只能为其指定一个Double类型的列表.
所以这是有效的:
ArrayList<Double> al5 = new ArrayList<Double>();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2042 次 |
| 最近记录: |