【问题标题】:Array as method argument数组作为方法参数
【发布时间】:2012-04-20 05:52:52
【问题描述】:
我们像这样声明字符串数组-
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
}
}
【问题讨论】:
标签:
java
arrays
arguments
【解决方案1】:
你可以,虽然你的语法有点不对。
mymethod(new String[]{"A"});
【解决方案2】:
这就是指定语言的方式。来自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[] 部分。
【解决方案3】:
你不能传递这样的数组。将其声明为变量,然后将变量传递给方法。