今天,我遇到了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 :(得分: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"));