一尘不染

Java数组参数声明语法“…”如何工作?

java

我写Java已有一段时间了,今天我遇到了以下声明:

public static void main(String... args) {

}

请注意数组声明中的“点点点”,而不是通常的括号[]。显然可以。实际上,我写了一个小测试并验证了它的有效性。因此,我提取了Java语法,以查看参数声明语法的位置,但未找到任何内容。

那么对那里的专家来说,这是如何工作的呢?它是语法的一部分吗?另外,虽然我可以像这样声明函数,但不能像这样在函数体内声明数组。

无论如何,您知道在哪里记录了此文件。这是好奇心,也许没有任何时间花在它上面,但是我很沮丧。


阅读 292

收藏
2020-09-08

共1个答案

一尘不染

查看Java语言规范,第三版,第8章(类)。埋在其中的是这个金块:

如果最后一个形式参数是类型T的可变Arity参数,则考虑定义类型T
[]的形式参数。该方法则是可变Arity方法。否则,这是固定的固定方法。可变arity方法的调用可能包含比形式参数更多的实际参数表达式。将评估所有与变量arity参数之前的形式参数不符的实际参数表达式,并将结果存储到一个数组中,该数组将传递给方法调用(第15.12.4.2节)。

基本上,任何方法调用的最后一个参数都可以具有T...。如果有,它将转换为T[]

因此,基本上,您拥有的是复制更传统的理想方法

String[] args
2020-09-08