Инициализация массива Java в списке аргументов
Почему первый вызов someMethod не компилируется, не будучи явным, что это String []?
Хорошо использовать инициализатор массива для создания массива String [], но вы не можете использовать его для передачи аргумента. Являются ли фигурные фигурные скобки используемыми каким-либо другим способом для передачи аргументов, которые сходят с ума, как я ожидаю, что это будет вести себя?
public void someMethod(String[] arr){
//do some magic
}
public void makeSomeMagic(){
String[] arr = {"cat", "fish", "cow"};
//Does not compile!
someMethod({"cat", "fish", "cow"});
//This compiles!
someMethod(new String[]{"cat", "fish", "cow"});
//This compiles!
someMethod(arr);
}
Ошибка компилятора:
Метод someMethod (String []) в типе Moo неприменим для аргументов (String, String, String)
Ответы
Ответ 1
Вы можете использовать нотацию инициализации { "hello", "world" }
при объявлении переменной массива или в выражении создания массива, например new String[] { ... }
.
См. Раздел 10.6 Инициализаторы массивов в Спецификации языка Java:
Инициализатор массива может быть указан в объявлении или как часть выражения создания массива (§15.10), создавая массив и предоставляя некоторые начальные значения
Ответ 2
Если вы не хотите использовать явный String[]
, используйте:
public void someMethod(String... arr){
//do some magic
}
…
someMethod("cm", "applicant", "lead");
Три периода после окончательного типа параметра указывают, что последний аргумент может быть передан как массив или как последовательность аргументов.
Подробнее.
Ответ 3
Или вы можете использовать varargs:
public void someMethod(String... arr){
//do some magic
}
public void makeSomeMagic(){
someMethod("cat", "fish", "cow");
}
В основном это фантастический синтаксис для параметра массива (vararg должен быть последним параметром в сигнатуре метода).
Ответ 4
Вы можете использовать фигурные скобки для инициализации массива. В любом случае он используется для определения блоков статусов.