Java5.0后,Java开始支持可变参数的方法,比如printf方法就是一个可变参数的方法。
我们也可以自定义可变参数的方法,具体语法为:
返回类型 函数名(参数类型...参数名字)
原理:就是将接收的参数组装成一个临时数组,然后再处理临时数组中的数据。
以下是一个简单的示例代码:
public class Main {
public static double max(double...values) {
double largest=Double.MIN_VALUE;
for(double v:values) {
if(v>largest) {
largest=v;
}
}
return largest;
}
public static void main(String[] args) {
double m=max(1.2,3.4,56.7,345.45,2,5);
System.out.println(m);
}
}
这段代码接受任意个double类型的参数,从中寻找其中的最大值并在控制台输出。
由于其实质上就是接收的一个数组,因此完全可以使用数组作为参数来代替列表。
以下是一个修改的示例代码,注意向自定义函数中传值方式的变化:
public class Main {
public static double max(double...values) {
double largest=Double.MIN_VALUE;
for(double v:values) {
if(v>largest) {
largest=v;
}
}
return largest;
}
public static void main(String[] args) {
double m2=max(new double[] {1.1,2.2,3.3});
System.out.println(m2);
}
}
当然,printf是使用的一个Object的数组,这种数组可以存放任何Java的类,因此将一个int的型的数值作为其中一个参数时,会发生自动装箱的操作。基于其原理,可以写出类似于以下代码的printf调用:
public class Main {
public static void main(String[] args) {
System.out.printf("%s->%d",new Object[] {"这个数字是",new Integer(10)});
}
}
其实main函数也可以写成可变参数方法的形式:
public class Main {
public static void main(String...args) {
System.out.printf("%s->%d",new Object[] {"这个数字是",new Integer(10)});
}
}
参考资料 Java核心技术第9版。