我可以像这样设置一个数组:
Object[] objects = {new Object()};
但是如果我有方法:
public void setObject(Object[] objects) {
}
我无法做到以下几点:
setObject({new Object()});
这是为什么?为什么{new Object()}
不足以作为参数,但足以初始化Object[]
数组?
答案 0 :(得分: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() };
答案 1 :(得分:3)
因为您尚未输入数组。它可以是对象,整数,等等。
以下内容应该有效:
setObject(new Object[]{new Object()});
答案 2 :(得分:1)
正确的回调是:
setObject(new Object[]{new Object()});
答案 3 :(得分:1)
每个Java数组都有一个组件类型。在初始化程序中使用时,编译器会推断新数组的类型(右侧)与声明的类型(左侧)相同。
当缺少声明时,编译器不知道数组的组件类型应该是什么。您必须明确,使用表达式setObject(new Object[] { new Object() })
有人可能想知道为什么编译器不会从声明的方法参数类型推断出类型,就像初始化变量时一样。但是,编译器根据参数类型解析调用方法;如果您不知道要调用的方法,则无法从其参数类型中推断出任何内容。初始化变量时没有循环性。