Создание общего массива с алмазным оператором

Сегодня я столкнулся с нечетной ситуацией создания массивных массивов Java 7. Взгляните на следующие два утверждения.

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

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

Здесь первый оператор компилируется без оператора бриллианта, если я поставлю алмазный оператор или общий тип с правой стороны, чем он не компилируется. Я столкнулся с такой же ситуацией для всего родового типа, List, Set

Может ли кто-нибудь сказать мне, в чем причина не компиляции второго заявления?

1 ответ

Вы не можете создать общий массив типа HashMap в java из-за стирания типа (общие (-ые) стираются на этапе компиляции). Этот код

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

Ваш первый оператор представляет собой массив нетипизированных 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"));
</string,>

licensed under cc by-sa 3.0 with attribution.