泛型使用基元数组而不是包装器数组具有意外行为

时间:2014-11-12 17:30:32

标签: java arrays generics

以下代码返回一个整数列表:

Integer[] arr = new Integer[] {3,2,1};
List<Integer> list = Arrays.asList(arr);

为什么相同的代码使用&#34; int&#34;返回int []的列表:

int[] arr = new int[] {3,2,1};
List<int[]> list = Arrays.asList(arr);

1 个答案:

答案 0 :(得分:3)

是的,它将此视为使用varargs和int[]作为类型参数的调用,即

List<int[]> list = Arrays.<int[]>asList(new int[][] { arr });

另一种方法是推断T=int ......这是不可能的,因为Java泛型不支持使用原语作为类型参数。这种限制是造成这种差异的原因。