【发布时间】:2013-02-15 19:51:47
【问题描述】:
我目前正在准备 Java OCA 考试,遇到了一个与 ArrayList 声明有关的问题。
以下哪项是有效的?:
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>();
并提到在没有泛型部分的情况下声明 ArrayList 也是有效的。
我也无法在网上找到关于此主题的体面文章。有人可以解释(或指出一篇好文章的方向)上面的不同排列吗?
提前致谢。
【问题讨论】:
-
一些泛型被 SO 格式所吞噬。
-
谢谢让我很困惑:P
-
关于 3.
<>被称为diamond operator并与java7一起引入。它是实例化泛型对象的快捷方式,因此在使用new时不必再次指定类型,因为它已在变量声明中指定。 -
这是 Java 7 中的一个特性,
ArrayList<Type> l = new ArrayList<>()只是ArrayList<Type> l = new ArrayList<Type>()的缩写形式。这是出现空白角的ONLY 有效情况。空白角度在以前的java版本中无效,类型应该是一致的(Double和Float是NOT)。你应该看看旧的语法,它更清楚。