在varargs java方法中列出而不是Array

use*_*745 -2 java arrays list variadic-functions

我在java中有一个varargs方法.因此,该方法需要一个Objects 数组.我通过了一个List方法,它工作了!我的意思是,它不仅编译,而且测试是绿色的.所以,我的问题是 - myList.toArray()调用方法时是否需要调用,或者此调用是否自动发生?

提前致谢!

以下是代码:

createSomething(final Object... parameters) {
  // varargs method
}

List<Object> data = new ArrayList<Object>();

createSomething(data); // is this wrong?
createSomething(data.toArray()); // should I always do this?
Run Code Online (Sandbox Code Playgroud)

JB *_*zet 7

您似乎认为列表被隐式转换为数组,并且该方法是使用包含列表中每个元素的数组调用的.

事实并非如此.实际上,该方法是使用包含单个元素的数组调用的:列表本身.

测试它

private void testVarargs(Object... args) {
    System.out.println(args.length);
    System.out.println(args[0]);
}
Run Code Online (Sandbox Code Playgroud)

和

List<String> list = Arrays.asList("hello", "world");
testVarargs(list);
Run Code Online (Sandbox Code Playgroud)

结果不会

2 
hello 
Run Code Online (Sandbox Code Playgroud)

但

1
[hello, world]
Run Code Online (Sandbox Code Playgroud)

这是正常的:你只是将一个对象作为参数传递给方法,恰好是一个List.因此List被包含在一个长度数组中,并且该方法作为参数被调用.