Вы можете объявить многомерные массивы вроде:
// 4 x 5 String arrays, all Strings are null
// [0] -> [null,null,null,null,null]
// [1] -> [null,null,null,null,null]
// [2] -> [null,null,null,null,null]
// [3] -> [null,null,null,null,null]
String[][] sa1 = new String[4][5];
for(int i = 0; i < sa1.length; i++) { // sa1.length == 4
for (int j = 0; j < sa1[i].length; j++) { //sa1[i].length == 5
sa1[i][j] = "new String value";
}
}
// 5 x 0 All String arrays are null
// [null]
// [null]
// [null]
// [null]
// [null]
String[][] sa2 = new String[5][];
for(int i = 0; i < sa2.length; i++) {
String[] anon = new String[ /* your number here */];
// or String[] anon = new String[]{"I'm", "a", "new", "array"};
sa2[i] = anon;
}
// [0] -> ["I'm","in","the", "0th", "array"]
// [1] -> ["I'm", "in", "another"]
String[][] sa3 = new String[][]{ {"I'm","in","the", "0th", "array"},{"I'm", "in", "another"}};
Не поддерживается синтаксис 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
общего назначения.
Начиная с Java 9 вы можете использовать Map.of
:
Map<String, Pair<String,String> values = Map.of("New York", new Pair<>("US Dollar", "NYC"));
Я не знаю, что такое Pair
, поскольку в JDK по умолчанию нет класса Pair
, но я предполагаю, что у него есть конструктор, который принимает оба значения.
Ваш подход создает анонимный класс, который также имеет ссылку на включающий объект, так что это не очень хорошее решение.