Мне интересно, почему вторая декларация карты (с использованием оператора алмаза) не компилируется, когда первая делает. Ошибка компиляции:
error: не может вызывать аргументы типа для HashMap; Map map2 = new HashMap < > () { Причина: не может использовать '< > ' с анонимными внутренними классами где K, V - переменные типа: K extends Объект, объявленный в классе HashMap V extends Объект, объявленный в классе HashMap
код:
Map<String, String> map1 = new HashMap<String, String>() { //compiles fine
{
put("abc", "abc");
}
};
Map<String, String> map2 = new HashMap<>() { //does not compile
{
put("abc", "abc");
}
};
ИЗМЕНИТЬ
Спасибо за ваши ответы - я должен был лучше прочитать ошибку компиляции.
Я нашел exaplanation в JLS
Это ошибка времени компиляции, если выражение создания экземпляра класса объявляет анонимный класс, используя форму "< > " для аргументов типа класса.