2

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

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

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

public void setObject(Object[] objects) {

}

我不能执行以下操作:

setObject({new Object()});

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

4

4 回答 4

8

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

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() };
于 2013-05-22T16:24:15.837 回答
3

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

以下应该有效:

setObject(new Object[]{new Object()});
于 2013-05-22T16:25:15.883 回答
1

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

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

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

于 2013-05-22T16:50:06.113 回答
1

正确的回调是:

setObject(new Object[]{new Object()});
于 2013-05-22T16:24:35.010 回答