对于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);
}
编译器错误如下:
Moo类型中的方法someMethod(String [])不适用于参数(String,String,String)
答案 0 :(得分:12)
在声明数组变量或数组创建表达式(如{ "hello", "world" }
)时,只能使用new String[] { ... }
初始化表示法。
请参阅Java语言规范中的Section 10.6 Array Initializers:
可以在声明中指定数组初始值设定项,也可以将其作为数组创建表达式(第15.10节)的一部分,创建数组并提供一些初始值
答案 1 :(得分:5)
如果您不想使用显式String[]
,请使用:
public void someMethod(String... arr){
//do some magic
}
…
someMethod("cm", "applicant", "lead");
最后一个参数类型之后的三个句点表示最终参数可以作为数组或参数序列传递。
答案 2 :(得分:1)
或者您可以使用varargs:
public void someMethod(String... arr){
//do some magic
}
public void makeSomeMagic(){
someMethod("cat", "fish", "cow");
}
它基本上是一个数组参数的奇特语法(vararg必须是方法签名中的最后一个参数)。
答案 3 :(得分:0)
您可以使用花括号初始化数组。在其他每种情况下,它都用于定义语句块。