Java 使用数组作为函数参数:";不是一份声明”;(爪哇)
我有一个函数,它接受一个Java 使用数组作为函数参数:";不是一份声明”;(爪哇),java,string,Java,String,我有一个函数,它接受一个String[]参数。这怎么可能: String[] string = {"string1", "string2"}; myFunction(string); 有效,鉴于: myFunction({"string1", "string2"}); 不是吗?它给了我一个错误: Illegal start of expression not a statement ";" expected 表达式的非法开始 不是声明 “;”期待着 你需要 myFunction(new St
String[]
参数。这怎么可能:
String[] string = {"string1", "string2"};
myFunction(string);
有效,鉴于:
myFunction({"string1", "string2"});
不是吗?它给了我一个错误:
Illegal start of expression
not a statement
";" expected
表达式的非法开始
不是声明
“;”期待着
你需要
myFunction(new String[]{"string1", "string2"});
语法在中解释。独立的{“string1”,“string2”}
是语法糖:编译器只能在声明和初始化数组时推断它应该是什么。但是,这种语法本身不起作用:
String[] s1 = {"abc"}; // works
String[] s2;
s2 = {"abc"}; // error, need to explicitly use 'new String[]{"abc"}'
顺便说一句,在您的情况下,您可以使用以下方法避免显式创建数组:
这是因为当您将
{“string1”、“string2”}
作为方法的参数传递时,它不知道该方法的期望值
根据文档,仅当您同时声明和实例化数组变量时,才允许使用语法
int[] a={1,4,8,6}; //allowed
这将使长度等于括号中传递的值数的int数组。所以可以像这样传递匿名数组对象
method(new int[]{2,4,8,9});
但不像
方法({2,4,8,9})代码>等我一下;)搜索JLS@arshajii:简而言之,简单的{}
表示法仅对初始化有效(即在声明变量的点处为变量赋值时)。在其他任何地方,你都需要使用显式的新字符串[]{}
。这是初始化符号。我可以使用varargs,但在我的例子中,我的函数有3个参数:int、String[]和Object[],所以我认为这是不可能的…@Sara当然可以,如果你把varargs字符串
作为最后一个参数的话。e、 g.void f(intx,Object[]y,String…z){}
。是的,但是我对Object[]有同样的“问题”。我更喜欢保持一致,在这里不使用varargs,因为这意味着我应该只对string[]或object[]使用它。我不认为这会很优雅^^^@Sara这一切都取决于你的节目背景。你到底做什么取决于你自己。
method(new int[]{2,4,8,9});