Я не уверен, правильно ли я сделал эту HashMap
Вы обнаружите, что компилятор недоволен этим.
Map<Item, GameObject> itemMap = createMap(){
private static Map<Item, GameObject> itemMap = new HashMap<>();
itemMap.put(Item.TOP, top);
itemMap.put(Item.MID, mid);
itemMap.put(Item.BOTTOM, bottom);
itemMap.put(Item.PLAYER, player);
return itemMap;
}
Выражение инициализации напоминает нечто среднее между вызовом метода и анонимным классом. Но это на самом деле либо полностью недействительным, либо неработоспособным. (createMap
объявлено где-нибудь? Как что?)
Я подозреваю, что вы, возможно, пытаетесь использовать идиому "инициализация карты с анонимным классом":
Map<Item, GameObject> itemMap = new HashMap<>() {{
put(Item.TOP, top);
put(Item.MID, mid);
put(Item.BOTTOM, bottom);
put(Item.PLAYER, player);
}};
Это мило и лаконично ... но в нем используется неясная языковая функция Java и поэтому, вероятно, это плохая идея. (Многие Java программисты не поймут этого.)
То, что на самом деле делается выше, - это объявление анонимного подкласса HashMap, который использует блок инициализатора экземпляра для заполнения экземпляра перед его возвратом.
(Вы когда-нибудь слышали о блоке инициализатора экземпляра? Многие Java программисты этого не сделали! И вас, вероятно, этому не научат.)
Это почти эквивалентно этому:
Map<Item, GameObject> itemMap = new HashMap<>();
itemMap.put(Item.TOP, top);
itemMap.put(Item.MID, mid);
itemMap.put(Item.BOTTOM, bottom);
itemMap.put(Item.PLAYER, player);
На мой взгляд, это гораздо лучший способ написать это. (Не будь милым :-))