Varargs方法和原始类型

时间:2016-05-08 09:18:25

标签: java variadic-functions

Effective Java 中,J.Bloch提到使用带有原始类型的varargs方法是不安全的。不过,Arrays.asList(1, 2, 4)的返回类型为List<int[]>,听起来很合理。现在我尝试自己重现这种行为,并且不能:

enter image description here

我的问题是,为什么类型被推断为List<Integer>而不是List<int[]>,如他所述?这是否意味着,在Java 8中,关于varargs的问题已不再适用,如果我们不太关心性能,我们可以安全地在任何地方使用它们。

1 个答案:

答案 0 :(得分:4)

作者最有可能意味着你不能传递基本类型元素的数组,并期望它像

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

将返回List<int[]>而不是List<Integer>,因为int[]->Integer[]之类的数组没有自动装箱,因此只有T... vararg可以使用的可能类型为{{1}因为泛型类型int[]不能表示基本类型。

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