Java可变参数
《关于这个语法糖太过少见以至于我完全不记得有学过》
基本语法
在 Java 5 中提供了变长参数,允许在调用方法时传入不定长度的参数。变长参数是 Java 的一个语法糖,本质上还是基于数组的实现。
在定义方法时,在最后一个形参后加上三点...,就表示该形参可以接受多个参数值,多个参数值被当成数组传入。
使用过程和数组其实没有什么大的差别,只是无需使用数组的形式罢了。
这个语法糖不是那么滴甜。
// 定义
public static void fun(String... strings) {
for (String s : strings) {
System.out.println(s);
}
}
// 使用
public static void main(String[] args) {
fun();
fun("123", "456");
fun("123244");
}
使用限制:
- 变长参数至多有一个。
- 变长参数只能是最后一个参数。
使用场景
我一直是不太习惯使用这个语法糖的,也担心使用了很造成什么问题。不过对一个事物的恐惧源于对它的不了解,现在理解了它的原理,也可以用起来了。
SO上有一个经典的讨论,结论是:当你不知道方法中要传递几个参数/你想传递不定数量的参数时使用。
Why to use this?
- What if, you don't know the number of arguments to pass for a method?
- What if, you want to pass unlimited number of arguments to a method?
How this works?
It creates an array with the given arguments & passes the array to the method.
注意事项
1、不可与有相同签名的数组参数方法重载
本质上是个数组,这也就带来了一个很明显的问题,方法重载时可以吗?
void fun(String[] strings){}
void fun(String... strings){}
答案是不可行的,二者会拥有相同的签名,导致编译报错。
2、优先匹配固定参数
当拥有固定参数和可变参数时,会优先匹配固定参数。
参考文章
1、Java 可变参数 | 菜鸟教程 (runoob.com)
2、variadic functions - When do you use varargs in Java? - Stack Overflow