我们将String数组声明为 -
String[] a={"A"};
但是当一个方法将String数组作为参数时,为什么我们不能像 -
那样调用该方法mymethod({"A"});
代码 -
class A{
static void m1(String[] a) { }
public static void main(String args[]){
m1(new String []{});//OK
m1({}); //Error
}
}
答案 0 :(得分:5)
你可以,虽然你的语法有点偏。
mymethod(new String[]{"A"});
答案 1 :(得分:4)
这就是指定语言的方式。来自section 10.6 of the JLS:
可以在声明(第8.3节,第9.3节,第14.4节)中指定数组初始值设定项,或者作为数组创建表达式(第15.10节)的一部分,以创建数组并提供一些初始值。
所以你已经看到它在声明中工作了,而array creation expression是在开头包含new ArrayElementType
的表单:
myMethod(new String[] {"A"});
请记住,当它是声明的一部分时,只涉及一种可能的元素类型。对于方法调用,它更棘手 - 可能有多个重载方法等。基本上,在参与之前,您需要将表达式{"A"}
作为字符串数组自行评估重载决议。
对于一些比较,在C#中也是如此,尽管C#3引入了隐式类型数组,其中元素类型是从值推断的,因此您可以编写:
// C# 3
MyMethod(new[] {"A"});
你仍然需要new[]
部分。
答案 2 :(得分:1)
你无法传递这样的数组。将其声明为变量,然后将变量传递给方法。