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

时间:2013-12-03 21:47:11

标签: java arrays list variadic-functions

我在java中有一个varargs方法。因此,该方法需要一个Object的数组。我将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?

1 个答案:

答案 0 :(得分:7)

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

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

测试
private void testVarargs(Object... args) {
    System.out.println(args.length);
    System.out.println(args[0]);
}

List<String> list = Arrays.asList("hello", "world");
testVarargs(list);

结果不会是

2 
hello 

1
[hello, world]

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