不允许将数组初始值设定项作为方法参数传递
Passing an array initializer as a method argument is not allowed
当我尝试将数组初始值设定项作为方法参数传递时,出现错误消息 'Array initializer is not allowed here'。
methodTakingArrayArgument({0,0,0})
但是,当明确提及类型时,该构造起作用。
methodTakingArrayArgument(new int[]{0,0,0})
是否有不支持此构造的原因? oracle 网站上似乎没有提到相同的文档。
编辑:
我知道在 Java 中创建数组的方法有固定数量。数组初始化器构造很自然地作为 Java 中的第一个 class 公民得到支持,就像在 typescript 等语言中一样。
正如其中一个答案所指出的,数组初始值设定项不是有效的表达式,这就是它不能传递给方法的原因。
尤其是Java Language Specification is the final authority on such questions: Chapter 15 Expressions in general, §15.12 Method Invocation Expressions and §15.10.1. Array Creation Expressions and 10.6. Array Initializers。
简而言之,您会发现:
- 方法调用的参数列表由一系列逗号分隔的表达式组成;
new int[]{0,0,0}
是一个 arrayCreationExpression,它又是 expression 的一种类型,因此可以作为参数在方法调用中;
{0,0,0}
是一个 arrayInitializer,它本身不是一个 expression,因此用作方法调用中的参数。
当我尝试将数组初始值设定项作为方法参数传递时,出现错误消息 'Array initializer is not allowed here'。
methodTakingArrayArgument({0,0,0})
但是,当明确提及类型时,该构造起作用。
methodTakingArrayArgument(new int[]{0,0,0})
是否有不支持此构造的原因? oracle 网站上似乎没有提到相同的文档。
编辑: 我知道在 Java 中创建数组的方法有固定数量。数组初始化器构造很自然地作为 Java 中的第一个 class 公民得到支持,就像在 typescript 等语言中一样。
正如其中一个答案所指出的,数组初始值设定项不是有效的表达式,这就是它不能传递给方法的原因。
尤其是Java Language Specification is the final authority on such questions: Chapter 15 Expressions in general, §15.12 Method Invocation Expressions and §15.10.1. Array Creation Expressions and 10.6. Array Initializers。 简而言之,您会发现:
- 方法调用的参数列表由一系列逗号分隔的表达式组成;
new int[]{0,0,0}
是一个 arrayCreationExpression,它又是 expression 的一种类型,因此可以作为参数在方法调用中;{0,0,0}
是一个 arrayInitializer,它本身不是一个 expression,因此用作方法调用中的参数。