Java 主函数签名上的 8 个可变参数
Java 8 varargs on main function signature
我正在将 Groovy 代码库转换为 Java 并且 忘记了 更改
public static void main(String... args) {
至
public static void main(String args[]) {
编译和运行项目一直以来才惊讶直到现在这是合法的Java8代码。
我知道 Java 8 Varargs 使函数可以有任意数量的参数,"compacting them into an Array" 取决于它们在方法调用中的位置。
但是 String... args
和 String[] args
函数的语法调用方式不同:
void function1 (String[] args) {}
function1({"one", "two", "three"});
void function2 (String... args) {}
function2("one", "two", "three");
那么从终端获取参数时,String... args
和 String args[]
一样合法吗?
编辑:
azurefrog 将答案链接到另一个很棒的问题。我想提另一个答案,评论提供了我正在寻找的答案:
Why doesn't Java's main use a variable length argument list?
评论 1:有趣。从另一个 answers/comments 来看,我猜这个新的主要声明语法是在 Java 1.5 中添加的。所以Java运行时根据你的main方法声明来决定是将字符串直接传递给main还是先构建数组?
评论2:不会,它总是构建一个数组。 String... args == String[]
args,就被调用的方法而言。参数无论如何都是数组
这就是我的疑问。不好意思问的不好。
我相信,自从将可变参数添加到该语言后,它就合法了。当然,调用它们的语法明显不同,但命令行参数不是由其他 Java 代码传入,而是“神奇地”传入。
JLS 12.1.4 指定为:
The method main must be declared public, static, and void. It must specify a formal parameter (§8.4.1) whose declared type is array of String. Therefore, either of the following declarations is acceptable:
public static void main(String[] args)
public static void main(String... args)
如您所说,在编译时,所有可变参数...
都被数组[]
换出。
因此 java 编译器识别您的可变参数并将它们放入数组中。
请参阅@Louis_Wasserman 对 JSL 引用的回答。
https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html --- Java 教程
我正在将 Groovy 代码库转换为 Java 并且 忘记了 更改
public static void main(String... args) {
至
public static void main(String args[]) {
编译和运行项目一直以来才惊讶直到现在这是合法的Java8代码。
我知道 Java 8 Varargs 使函数可以有任意数量的参数,"compacting them into an Array" 取决于它们在方法调用中的位置。
但是 String... args
和 String[] args
函数的语法调用方式不同:
void function1 (String[] args) {}
function1({"one", "two", "three"});
void function2 (String... args) {}
function2("one", "two", "three");
那么从终端获取参数时,String... args
和 String args[]
一样合法吗?
编辑:
azurefrog 将答案链接到另一个很棒的问题。我想提另一个答案,评论提供了我正在寻找的答案:
Why doesn't Java's main use a variable length argument list?
评论 1:有趣。从另一个 answers/comments 来看,我猜这个新的主要声明语法是在 Java 1.5 中添加的。所以Java运行时根据你的main方法声明来决定是将字符串直接传递给main还是先构建数组?
评论2:不会,它总是构建一个数组。 String... args == String[]
args,就被调用的方法而言。参数无论如何都是数组
这就是我的疑问。不好意思问的不好。
我相信,自从将可变参数添加到该语言后,它就合法了。当然,调用它们的语法明显不同,但命令行参数不是由其他 Java 代码传入,而是“神奇地”传入。
JLS 12.1.4 指定为:
The method main must be declared public, static, and void. It must specify a formal parameter (§8.4.1) whose declared type is array of String. Therefore, either of the following declarations is acceptable:
public static void main(String[] args) public static void main(String... args)
如您所说,在编译时,所有可变参数...
都被数组[]
换出。
因此 java 编译器识别您的可变参数并将它们放入数组中。
请参阅@Louis_Wasserman 对 JSL 引用的回答。
https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html --- Java 教程