假设我有一个方法(在库中,所以我无法修改它),如下所示:
public void ellipsisArg(Object...objects){
for(Object object : objects){
doSomething(object);
}
}
Run Code Online (Sandbox Code Playgroud)
如果我将Collection或Iterable传递给此方法,会发生什么?for()循环是否会遍历集合,还是会将Collection作为一个对象接受并将整个事件传递给doSomething()?
import java.util.*;
import java.lang.*;
class Main{
public static void main (String[] args) throws java.lang.Exception{
testIterable(getStringList());
}
public static ArrayList<String> getStringList(){
ArrayList<String> stringList = new ArrayList<String>();
stringList.add("String one");
stringList.add("String two");
return stringList;
}
public static void testIterable(Object...objects){
for(Object object : objects){
System.out.println("Object: "+ object.toString());
}
}
}
Run Code Online (Sandbox Code Playgroud)
预期的产出是:
对象:字符串一
对象:字符串二
不幸的是,输出结果如下:
对象:[String one,String two]
因此它将整个ArrayList作为一个Object.
编辑:
但是,将ArrayList转换为String []会产生所需的行为,这是一项简单的任务:
public static String[] convertToArray(ArrayList<String> stringList){
String[] stringArray = new String[stringList.size()];
// If we use toArray() without an argument, it will return Object[]
return stringList.toArray(stringArray);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1717 次 |
| 最近记录: |