Java 自动将集合转换为参数数组?
Java automatically converting collections to arguments arrays?
我知道 Java "..." 数组参数语法可以接收一个数组作为参数,或者只是传递给方法的许多参数。但是,我注意到它对 Collections 也是如此:
public static void main(String[] args) {
Collection<Object> objects = new ArrayList<>();
test(objects);
}
public static void test (Object...objects) {
System.out.println("no compile errors");
}
无需调用 toArray()
方法即可编译和运行。幕后发生了什么? "auto-conversion" 是否有针对此语法的其他方法?
顺便说一句,我正在使用 Java 1.7.
它不会将集合转换为数组。它将集合本身作为第一个 vararg 参数传递。测试方法因此接收到一个元素的数组,这个元素就是ArrayList。
这可以通过替换
轻松找到
System.out.println("no compile errors");
来自
System.out.println(Arrays.toString(objects);
或者使用调试器。
A Collection<Object>
也是一个 Object
所以当你用
调用 test
Collection<Object> objects = new ArrayList<>();
test(objects);
它将使用作为您的集合的单个参数调用:该方法将接收具有单个元素的数组。
这里发生的事情是该方法接收一个长度为 1 的数组,其中包含单个 Collection
.
大多数时候,签名
method(Object... objs)
应该避免,因为它会接受 任何 参数序列,甚至是原语,因为这些会被自动装箱。
我知道 Java "..." 数组参数语法可以接收一个数组作为参数,或者只是传递给方法的许多参数。但是,我注意到它对 Collections 也是如此:
public static void main(String[] args) {
Collection<Object> objects = new ArrayList<>();
test(objects);
}
public static void test (Object...objects) {
System.out.println("no compile errors");
}
无需调用 toArray()
方法即可编译和运行。幕后发生了什么? "auto-conversion" 是否有针对此语法的其他方法?
顺便说一句,我正在使用 Java 1.7.
它不会将集合转换为数组。它将集合本身作为第一个 vararg 参数传递。测试方法因此接收到一个元素的数组,这个元素就是ArrayList。
这可以通过替换
轻松找到System.out.println("no compile errors");
来自
System.out.println(Arrays.toString(objects);
或者使用调试器。
A Collection<Object>
也是一个 Object
所以当你用
test
Collection<Object> objects = new ArrayList<>();
test(objects);
它将使用作为您的集合的单个参数调用:该方法将接收具有单个元素的数组。
这里发生的事情是该方法接收一个长度为 1 的数组,其中包含单个 Collection
.
大多数时候,签名
method(Object... objs)
应该避免,因为它会接受 任何 参数序列,甚至是原语,因为这些会被自动装箱。