0

我们像这样声明字符串数组 -

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
        }
    }
4

3 回答 3

5

你可以,虽然你的语法有点偏离。

mymethod(new String[]{"A"});
于 2012-04-20T05:55:11.950 回答
4

这就是指定语言的方式。从JLS 的第 10.6 节

数组初始值设定项可以在声明中指定(第 8.3 节、第 9.3 节、第 14.4 节),或作为数组创建表达式的一部分(第 15.10 节)来创建数组并提供一些初始值。

因此,您已经看到它在声明中工作,并且数组创建表达式new ArrayElementType是开头包含的形式:

myMethod(new String[] {"A"});

请记住,当它是声明的一部分时,只涉及一种可能的元素类型。对于方法调用,它更棘手 - 可能有多个重载方法等。基本上,在参与重载决议之前,您需要让表达式自行{"A"}评估为字符串数组。

为了进行一些比较,在 C# 中也是如此,尽管 C# 3 引入了隐式类型数组,其中元素类型是从值中推断出来的,因此您可以编写:

// C# 3
MyMethod(new[] {"A"});

不过,您仍然需要该new[]零件。

于 2012-04-20T05:55:36.507 回答
1

你不能传递这样的数组。将其声明为变量,然后将变量传递给方法。

于 2012-04-20T05:53:34.243 回答