【问题标题】: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】:

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

        【讨论】:

          猜你喜欢
          • 2020-12-27
          • 2021-04-19
          • 2017-04-22
          • 1970-01-01
          • 2020-03-16
          • 2013-02-21
          • 2011-10-31
          • 2016-08-19
          • 1970-01-01
          相关资源
          最近更新 更多