Varargs 方法和原始类型

Varargs methods and primitive types

Effective Java 中,J. Bloch 提到对原始类型使用可变参数方法是不安全的。确切地说,Arrays.asList(1, 2, 4) 有 return 类型 List<int[]>,这听起来很合理。现在我试图自己重现这种行为,但不能:

我的问题是,为什么类型推导为 List<Integer> 而不是他所说的 List<int[]>?这是否意味着,在 Java 8 中,关于可变参数的问题不再相关,如果我们不太关心性能,我们可以安全地在我们想要的任何地方使用它们。

作者的意思很可能是您不能传递基本类型元素的数组并期望它像

一样被装箱
int[] intArray = {1,2,3};
Arrays.asList(intArray);

return List<int[]> 而不是 List<Integer> 因为没有像 int[]->Integer[] 这样的数组自动装箱所以只有 T... 可以使用的可能类型vararg 是 int[] 因为通用类型 T 不能表示原始类型。


其他可能的问题是您正在阅读本书的第一版(2001 年发行),但是在 2004 年发行的 Java 1.5(Java 5.0)中添加了自动装箱。