我一直在学习Java(使用Java 6),我注意到当创建Collections
对象(比如ArrayList
)时,必须在引用类型中声明类型参数并在对象类型中。仅在引用类型中声明类型参数不是更容易吗?或者是否存在类型参数可能不同的情况?
例如,下面的类型参数(String
)必须声明两次。
List<String> aList = new ArrayList<String>();
答案 0 :(得分:3)
Java 7还引入了"diamond" form,它推断了类型并允许您编写较少详细的代码。
如果类的类型参数列表为空 - 菱形表单 &#34;&LT;&GT;&#34; - 推断出类的类型参数。这是合法的, 虽然作为一种风格强烈劝阻,但要有白色空间 &#34;&lt;&#34;之间和&#34;&gt;&#34;一颗钻石。
所以,你可以写:
List<String> aList = new ArrayList<>();
有几个例子here.
答案 1 :(得分:2)
查看https://code.google.com/p/guava-libraries/wiki/CollectionUtilitiesExplained 静态构造函数:
在JDK 7之前,构建新的泛型集合需要不愉快的代码重复:
List<TypeThatsTooLongForItsOwnGood> list = new ArrayList<TypeThatsTooLongForItsOwnGood>();
我认为我们都同意这是不愉快的。 Guava提供静态方法,使用泛型来推断右侧的类型:
List<TypeThatsTooLongForItsOwnGood> list = Lists.newArrayList();
Map<KeyType, LongishValueType> map = Maps.newLinkedHashMap();
可以肯定的是,JDK 7中的钻石操作员不会那么麻烦:
List<TypeThatsTooLongForItsOwnGood> list = new ArrayList<>();