我有一个带String[]
参数的函数。怎么可能这样:
String[] string = {"string1", "string2"};
myFunction(string);
有效,但是:
myFunction({"string1", "string2"});
不?它给了我错误:
Illegal start of expression not a statement ";" expected
答案 0 :(得分:6)
独立{"string1", "string2"}
是语法糖:只有在声明和初始化数组时,编译器才能推断它应该是什么。但是,就它本身而言,这种语法不起作用:
String[] s1 = {"abc"}; // works
String[] s2;
s2 = {"abc"}; // error, need to explicitly use 'new String[]{"abc"}'
除此之外,在您的情况下,您可以使用varargs来避免显式数组创建:
void myFunction(String... args) {
// args is a String[]
}
...
myFunction("string1", "string2");
答案 1 :(得分:3)
你需要
myFunction(new String[]{"string1", "string2"});
语法在Java Language Specification, Chapter 10.2 Array Variables
中说明答案 2 :(得分:1)
这是因为当你传递{"string1","string2"}
作为方法的参数时它不知道它对它的期望是什么。
根据文档,只有在同时声明和实例化数组变量时才允许语法
int[] a={1,4,8,6}; //allowed
这将使int数组的长度等于括号中传递的值的数量。 。所以你可以像这样传递匿名数组对象
method(new int[]{2,4,8,9});
但不像method({2,4,8,9});