Java Varargs方法和基元类型

Java Varargs方法和基元类型,java,variadic-functions,Java,Variadic Functions,在有效的JavaJ.Bloch中提到,将varargs方法用于原语类型是不安全的。显然,Arrays.asList1、2、4有返回类型List,这听起来很合理。现在我试图自己复制这种行为,但无法: 我的问题是,为什么像他所说的那样,类型被推断为列表而不是列表?这是否意味着,在Java 8中,有关varargs的问题不再相关,如果我们不太关心性能,我们可以在任何地方安全地使用它们。作者最可能的意思是,您不能传递基元类型元素的数组并期望它像装箱一样装箱 int[] intArray = {1,2,3

在有效的JavaJ.Bloch中提到,将varargs方法用于原语类型是不安全的。显然,Arrays.asList1、2、4有返回类型List,这听起来很合理。现在我试图自己复制这种行为,但无法:


我的问题是,为什么像他所说的那样,类型被推断为列表而不是列表?这是否意味着,在Java 8中,有关varargs的问题不再相关,如果我们不太关心性能,我们可以在任何地方安全地使用它们。

作者最可能的意思是,您不能传递基元类型元素的数组并期望它像装箱一样装箱

int[] intArray = {1,2,3};
Arrays.asList(intArray);
它将返回List not List,因为没有int[]->Integer[]这样的数组的自动装箱,所以只有可能的类型可以由T使用。。。vararg是int[],因为泛型类型T不能表示基元类型


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

作者最有可能的意思是,您无法传递基元类型元素数组,并期望它像装箱一样装箱

int[] intArray = {1,2,3};
Arrays.asList(intArray);
它将返回List not List,因为没有int[]->Integer[]这样的数组的自动装箱,所以只有可能的类型可以由T使用。。。vararg是int[],因为泛型类型T不能表示基元类型


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

但Java 1.5中也添加了varargs,因此如果书中提到varargs,则必须是Java 5+。但是,如果书中提到varargs,则必须是Java 5+。