4

为什么,如果你有,比方说,这些功能:

void func1(Object o){
      //some code
}
void func1(Object[] o){
      //some code
}

例如,您可以调用:

func1("ABC");

不是

func1({"ABC", "DEF"}); // instead having to write:
func1(new Object[]{"ABC", "DEF"});

问题:有什么特殊原因需要在数组上调用构造函数吗?

4

4 回答 4

5

数组初始化器”仅可用于声明/赋值:

Object[] o = { 1, 2 };

或者对于“数组创建表达式”

new Object[] { 1, 2 };

不适用于方法调用:

// Doesn't work:
func1({1, 2});

就是这样……您可以在JLS 的第 10.6 章中了解它。数组初始化器。提取物:

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

除了现在没有在 JLS 中定义之外,似乎没有理由说明未来的 Java 版本不允许在其他上下文中使用数组初始化器/数组文字。数组类型可以从使用数组字面量的上下文中推断出来,或者从包含的变量初始化器中推断出来

当然,您可以声明func1具有可变参数参数。但是你应该小心重载它,因为这可能会在调用站点引起一些混乱

于 2012-09-17T12:07:27.697 回答
5

有人建议 Java SE 5.0 将使用数组文字表示法。不幸的是,我们得到了可变参数,随之而来的是所有的乐趣。

所以要回答为什么的问题,语言就是这样。您可能会在更高版本的 Java 中看到列表文字。

于 2012-09-17T12:08:43.900 回答
1

您正在尝试执行 Java 尚不支持的内联数组初始化。

我想如果你愿意的话,你可以使用可变参数来实现所需的结果,但是如果你需要将一个数组传递给一个方法,你必须按照 Java 喜欢初始化数组的方式来初始化它。

于 2012-09-17T12:15:15.310 回答
0

当你调用一个带值func1("ABC")类型的对象时,java会自动创建。要创建类型以外的任何其他对象,您需要使用运算符。String"ABC"

Stringnew

于 2012-09-17T12:06:09.620 回答