jdk5之后出现了调用方法时传递不定参数的情况,如下所示:

List<Intrger> list1 = Arrays.asList(new Integer[]{1,2,3});
List<int[]> list2 = Arrays.asList(new int[]{1,2,3});

在使用不定参数时,可以传入一个数组或是以逗号间隔的参数列表。但是以上两行代码都向方法中传入数组,而传入基本类型数组时并没有按照预想的返回List<Intrger>,而是返回List<int[]>类型出现的原因是什么呢?可以看看Arrays.asList()方法源代码如下:

public static <T> List<T> asList(T... a){
return new ArrayList<T>(a);
}

从源代码看出方法定义了范形,而范形是只能对对象范形,比如如下定义的范形是不对的。

class Obj<T>{}
Obj<int> obj = new Obj<int>();

在代码实例化Obj对象是会编译出错,因为不能对基本类型范形。

所以List<int[]> list2 = Arrays.asList(new int[]{1,2,3});代码中new int[]{1,2,3}因为范形被不定参数当着一个参数所以返回值类型为List<int[]>。

所以当不定参数使用范形定义,而且使用数组调用不定参数方法时不定参数只能接受对象类型的数组的情况。

有代码如下:

class Obj{
static List<Integer> method(Integer... a){
return null;
}
}
Obj.method(new Integer[]{1,2,3});//正确
Obj.method(new int[]{1,2,3});//不正确
Obj.method(1,2,3);//正确
05-28 22:54