参数列表中的Java数组初始化

Nic*_*arr 14 java arrays

为什么第一次调用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);
}
Run Code Online (Sandbox Code Playgroud)

编译器错误如下:

Moo类型中的方法someMethod(String [])不适用于参数(String,String,String)

aio*_*obe 13

您只能{ "hello", "world" }在声明数组变量时使用初始化表示法,或者在数组创建表达式中使用初始表示法new String[] { ... }.

请参见Java语言规范中的第10.6节"数组初始化器 ":

可以在声明中指定数组初始值设定项,也可以将其作为数组创建表达式(第15.10节)的一部分,创建数组并提供一些初始值


0x2*_*9A3 5

如果您不想使用explicit String[],请使用:

public void someMethod(String... arr){
    //do some magic
}
…
someMethod("cm", "applicant", "lead");
Run Code Online (Sandbox Code Playgroud)

最后一个参数类型之后的三个句点表示最终参数可以作为数组或参数序列传递.

阅读更多.

  • 只有当他将签名更改为`String ... args`时才会有效. (3认同)