在学习安卓AsyncTask,要重写这个方法:
@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
}
忽然间忘记了中间有关Integer... values用法,所以重新看书,写一篇博客来复习一下。
JAVA方法里的可变参数准确来说应该是可变个数的参数,相当于一个数组,可以用下面的代码来测试:
import java.util.Arrays;
public class Test {
public static void main(String[] args){
int[] arr = {1, 2, 3};
method1(arr);
method2(arr);
}
public static void method1(int ... arr){
System.out.println(Arrays.toString(arr));
}
public static void method2(int[] arr){
System.out.println(Arrays.toString(arr));
}
}
编译通过,输出结果为:
[1, 2, 3]
[1, 2, 3]
完全一样,参数可以用数组传入。但是,事实上,这并不能体现“可变个数”的特点,执行方法:
method1(1, 2, 3);
method2(1, 2, 3);
method1执行结果不变,method2编译不通过,可知,一定程度上,可变参数比传入数组功能更丰富。
那如果方法的参数既有定长参数和可变参数或者多个可变参数呢?增加方法:
public static void method3(int a, int ... arr){
System.out.println("execute 1");
}
public static void method3(int a, int b){
System.out.println("execute 2");
}
//编译错误!
//public static void method4(int ... arr, int a){}
//编译错误!
//public static void method5(int ... arr1, double ... arr2){}
可变长参数必须为方法的最后一个参数,自然不可以同时存在两个可变长参数。
另外,还存在一个优先匹配的问题,如执行method(1, 2)输出是
execute 2
重载时优先匹配的是定长参数。