public class Sonnet29 implements Poem { private String[] poem; public Sonnet29() { poem = { "foo", "bar" , "baz"}; } @Override public void recite() { //... } }
Строка
poem = { "foo", "bar" , "baz"};
дает ошибку компиляции.Какая-либо определенная причина, почему это не позволяется? Как я инициализирую Массив строк с константами массива?
Править: Спасибо люди для Ваших ответов. Теперь я ясен, что позволяется и что не. Но я могу спросить Вас, почему это НЕ позволяется?
String[] pets; pets = {"cat", "dog"};
После поиска с помощью Google немного, я нашел эту ссылку, где в, сказано, что кодирование как это оставляет компилятор в неоднозначности - должны ли домашние животные быть массивом строк или массивом Объектов. Однако от объявления, это может очень хорошо выяснить, что это - Массив строк, правильно???
Это сделает то, что вы ищете:
public Sonnet29() {
poem = new String[] { "foo", "bar", "baz" };
}
Списки инициализации разрешены только при создании нового экземпляра массива.
Инициализатор массива может быть указан в объявлении или как часть выражения создания массива (§15. 10), создавая массив и предоставляя некоторые начальные значения
Короче говоря, это законный код:
private int[] values1 = new int[]{1,2,3,4};
private int[] values2 = {1,2,3,4}; // short form is allowed only (!) here
private String[][] map1 = new String[][]{{"1","one"},{"2","two"}};
private String[][] map2 = {{"1","one"},{"2","two"}}; // short form
List<String> list = Arrays.asList(new String[]{"cat","dog","mouse"});
а это незаконный:
private int[] values = new int[4];
values = {1,2,3,4}; // not an array initializer -> compile error
List<String> list = Arrays.asList({"cat","dog","mouse"}); // 'short' form not allowed
{"cat", "dog"}
Это не массив, это инициализатор массива.
new String[]{"cat", "dog"}
Это можно рассматривать как «конструктор» массива с двумя аргументами. Краткая форма предназначена только для уменьшения RSI.
Они могли придать реальный смысл {"кошка", "собака"}, чтобы вы могли говорить такие вещи, как
{"cat", "dog"}.length
Но почему они должны усложнять написание компилятора, не добавляя ничего полезного? (Ответ ZoogieZork можно легко использовать)