【问题标题】:Passing Array as argument in form {}以 {} 形式将数组作为参数传递
【发布时间】:2013-05-22 16:23:31
【问题描述】:

我可以这样设置一个数组:

Object[] objects = {new Object()};

但是,如果我有一个方法:

public void setObject(Object[] objects) {

}

我无法执行以下操作:

setObject({new Object()});

这是为什么?为什么{new Object()} 不足以作为参数但足以初始化Object[] 数组?

【问题讨论】:

    标签: java


    【解决方案1】:

    你可以传递一个匿名数组:

    setObject(new Object[] { new Object() });
    

    请注意,语法{ new Object() } 只适用于在声明中初始化数组时。例如:

    Object[] arr = { new Object() };
    

    声明数组后这不起作用:

    Object[] arr;
    //uncomment below line and you'll get a compiler error
    //arr = { new Object() };
    arr = new Object[] { new Object() };
    

    【讨论】:

    • 嘿,我上周刚刚解决了这个问题,并提出了几乎相同的解决方案。我知道这是否是“完美”的答案,但我可以向您保证它确实可以正常工作。
    【解决方案2】:

    因为您还没有键入数组。它可以是对象、整数等。

    以下应该有效:

    setObject(new Object[]{new Object()});
    

    【讨论】:

      【解决方案3】:

      正确的回调是:

      setObject(new Object[]{new Object()});
      

      【讨论】:

        【解决方案4】:

        每个 Java 数组都有一个组件类型。在初始化器中使用时,编译器会推断出新数组的类型(右侧)与声明的类型(左侧)相同。

        当缺少声明时,编译器不知道数组的组件类型应该是什么。你必须是明确的,使用表达式setObject(new Object[] { new Object() })

        你可能想知道为什么编译器不从方法参数的声明类型推断类型,就像初始化变量时那样。但是,编译器会根据参数类型来解析要调用的方法;如果你不知道你正在调用的方法,你就不能从它的参数类型中推断出任何东西。初始化变量时没有循环。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-08-12
          • 2016-09-26
          • 1970-01-01
          • 2011-07-10
          • 2021-06-03
          • 2014-03-09
          相关资源
          最近更新 更多