使用菱形运算符创建通用数组

时间:2013-12-14 06:33:06

标签: java generics collections

今天,我遇到了Java 7通用数组创建的奇怪情况。看看下面的两个语句。

 Map<String, String>[] hashArr= new HashMap[2]; // Compiles 

 Map<String, String>[] hashArr= new HashMap<>[2];// Does not compile

如果我在右侧放置钻石操作符或泛型类型而不是编译,则第一个语句在没有钻石操作符的情况下编译。我遇到了所有通用类型List<T>Set<T>

的相同情况

任何人都可以告诉我,不编译第二个声明的原因是什么?

1 个答案:

答案 0 :(得分:2)

由于类型擦除,您无法在java中创建HashMap类型的通用数组(通用编译步骤将删除通用数据)。这段代码

Map<String, String>[] hashArr= new HashMap<String,String>[2]; // gives a better error.

你的第一个语句是一个无类型HashMap的数组,我知道它编译。它有用吗?

对于喜悦,这确实有效

Map<String, String>[] hashArr = new HashMap[1];
hashArr[0] = new HashMap<>();                    // Your diamond sir.
hashArr[0].put("Hello", "World");
System.out.println(hashArr[0].get("Hello"));