2013-12-14 41 views
0

今天,我遇到了Java 7泛型数组创建的奇怪情况。请看下面的两条语句。通过钻石算子创建通用数组

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

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

这里首先声明编译没有钻石运营商,如果我把钻石运营商或通用型的右侧比它不会编译。我面临所有类型的相同情况,List<T>Set<T>

谁能告诉我,什么是不编译第二条语句的原因?

+0

@Downvoter,请发表评论,这是什么问题的错误? – Masudul

+0

因为你不能创建一个'HashMap'类型的泛型数组。 –

+0

@ElliottFrisch,我可以用第一个语句创建数组。 – Masudul

回答

2

由于类型擦除(通用(s)被编译步骤擦除),您不能在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"));