Инициализация массива 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

Вы можете использовать фигурные скобки для инициализации массива. В любом случае он используется для определения блоков статусов.