在Java中的Collections对象中声明两次类型参数

时间:2015-03-10 23:16:02

标签: java arrays list collections types

我一直在学习Java(使用Java 6),我注意到当创建Collections对象(比如ArrayList)时,必须在引用类型中声明类型参数并在对象类型中。仅在引用类型中声明类型参数不是更容易吗?或者是否存在类型参数可能不同的情况?

例如,下面的类型参数(String)必须声明两次。

List<String> aList = new ArrayList<String>();

2 个答案:

答案 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<>();