Создание карты через анонимный класс с помощью <>

В JDK 1.7 я могу создать Collection например, скажем HashMap как это:

private HashMap<String, String> map = new HashMap<>();

С бриллиантом <> в конце.

Но если я создаю карту, как это:

private static final HashMap<String, String> MAP = new HashMap<>() {{
    put("something", "something");
}};

На алмазном компиляторе написано, что:

Cannot use ''<>'' with anonymous inner classes

Я должен использовать: ... new HashMap<String, String>() {{.... чтобы код компилировался.

Почему это так? Почему я могу создать карту и использовать diamond, если я создаю только новый экземпляр, но код не компилируется, если я создаю карту через анонимный класс?

1 ответ

Решение

Это всего лишь предположение, но когда вы делаете

new HashMap<>() {{
    put("something", "something");
}};

Это на самом деле создает подкласс HashMap Мне это не нравится, потому что вы запачкали свои классы кучей подклассов. Я предполагаю, что в этом случае Java не может определить, что представляет собой общий тип diamond, потому что он находится в подклассе.

Другие вопросы по тегам