Нет поддержки синтаксиса Java для создания конструкции Java в Java, такой как литерал карты. Если вы поместите "US Dollar", "NYC"
в круглые скобки, как вы сделали, то компилятор предположит, что есть какое-то выражение. Он находит запятую и жалуется, что нет оператора присваивания. В действительности возможны другие операторы, такие как +
, но это сообщение, которое дает компилятор. Синтаксический анализатор просто опустил возможность «выражения присваивания» в дереве разбора, пытаясь понять, что оказалось синтаксической ошибкой.
Предполагая, что вы уже создали свой собственный класс Pair
, который уже находится в области, просто создайте Pair
явно с помощью new
. (Вы можете использовать оператор diamond, доступный с Java 7, чтобы сократить ваш код.)
private HashMap<String, Pair<String, String>> s = new HashMap<>() {{
put("New York", new Pair<>("US Dollar", "NYC"));
}};
Использование этой «двойной скобки» инициализации может работать, но только потому, что она
- Создает анонимный подкласс
Hashmap
с внешними скобками.
- Создает инициализатор экземпляра с внутренними скобками, который вы используете для инициализации карты.
Начиная с Java 9, вы можете использовать Map.of
, чтобы указывать Map
с конкретными значениями, без дополнительных дополнительных анонимных классов.
private Map<String, Pair<String,String>> s = Map.of("New York", new Pair<>("US Dollar", "NYC"));
Вы также можете рассмотреть возможность создания собственного осмысленного класса для использования вместо общего Pair
класса.