我们使用重载方法的方式解决了对不同的参数类型、参数个数进行同样的计算。但有时会遇到类型相同,但参数数量不定的情况,如果此时依然使用方法重载将会使得代码异常臃肿甚至无法实现。这时你可能会想到使用数组,但Java提供了不定长参数的机制使得在语法和写法上更为优雅。
示例:
public class Test{
public static void main(String[] args) {
test("aaa");
test("aaa", "bbb");
test("aaa", "bbb", "ccc");
}
public static void test(String arg, String... args) {
System.out.println(arg);
System.out.println("----------------");
//从数组中取出
for (String s : args) {
System.out.println(s);
}
}
}
语法为:参数类型… 参数名
实际上参数为对应类型的数组,比如int...
实际上是int[]
。如果一个方法的参数是不定参数的话,这个参数将在编译时根据参数个数动态生成一个数组,然后传入方法执行。
//正常输出123
public class DailyTest {
public static void main(String[] args) {
test(1,2,3);
}
public static void test(int... is) {
for(int i=0; i<is.length; i++) {
System.out.println(is[i]);
}
}
}
需要注意的是:
- 方法的参数列表中最多只能存在一个不定长参数;因为如果同时存在多个不定长参数编译器将无法区分普通参数与不定长参数的间隔。
- 如果一个方法中存在不定长参数那必须将它置为参数列表的最后一个参数,理由同上。不满足这两个条件中任意一个都无法通过编译。
- 不定参数可以出现在重载方法中。