Инициализация двойной скобки (анонимный внутренний класс) с оператором ромба

Мне интересно, почему второе объявление карты (с использованием оператора ромба) не компилируется, когда это делает первое. Ошибка компиляции:

ошибка: невозможно вывести аргументы типа для HashMap; Карта map2 = новая HashMap() { причина: нельзя использовать '' с анонимными внутренними классами где K,V - переменные типа: K расширяет объект, объявленный в классе HashMap V расширяет объект, объявленный в классе HashMap

Код:

    Map map1 = new HashMap() { //compiles fine

        {
            put("abc", "abc");
        }
    };

    Map map2 = new HashMap<>() { //does not compile

        {
            put("abc", "abc");
        }
    };

РЕДАКТИРОВАТЬ
Спасибо за ваши ответы - я должен был лучше прочитать ошибку компиляции. Я нашел объяснение в JLS

Это ошибка времени компиляции, если выражение создания экземпляра класса объявляет анонимный класс, используя форму "" для аргументов типа класса.

11
задан assylias 19 March 2012 в 16:29
поделиться