我在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?
答案 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被包含在一个长度数组中,并且该方法被调用,该数组作为参数。