Создание карты через анонимный класс с помощью <>
В 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, потому что он находится в подклассе.