所以基本上从我在StackOverflow上的搜索中,弹出(如果错误则纠正我):
您可以通过以下方式定义接受变量参数(在本例中为任何Object)的函数:
public void varadric(Object... arguments) {
//I'm a dummy function
}
您可以使用任何参数计数(扩展Object)调用此方法,并且您将在函数中获得一个参数Object[]
:
public static main() {
varadric("STRING", new ArrayList<int>());
}
public void varadric(Object... arguments) {
System.out.println("I've received "+arguments.length+" arguments of any Object subclass type.");
}
你可以不加思索generate the input as Object[] array and pass as a single parameter而不做任何改动:
public static main() {
Object[] args = new Object[2];
args[0] = "STRING";
args[1] = new ArrayList<int>());
//Should say it got 2 arguments again!
varadric(args);
}
现在我的问题是:由于Object[]
也实现了Object
,这是否意味着无法在varargs中传递它(最后是嵌套数组?)?
想象一下以下具有更具体描述的场景:
public void varadric(Object[]... arguments) {
//I'm a function that expects array of arrays
// - but I'm not sure if I'll allways get that
}
有人可以为我说清楚吗?
答案 0 :(得分:2)
嗯,有几个选择:
自己创建一个数组:
varadric(new Object[] { array })
声明类型为Object
的局部变量,并让编译器将包装在中:
Object tmp = array;
varadric(tmp);
以上变化 - 只是演员:
varadric((Object) array);
但是,是的,您说得对,当提出类型为Object[]
的单个参数且声明为Object... foo
的varargs参数时,编译器赢得了&#t; t 将它包装起来,因为它在一个数组中,因为它不需要。
答案 1 :(得分:1)
它将是一个2D数组。
此声明public void varadric(Object[]... arguments)
将收到...
的数组Object[]
}
例如:
public class Test {
public static void main(String[] args) {
Object[] o = new Object[2];
o[1] = "hi";
t(o);
}
public static void t(Object[]... arg) {
System.out.println(arg[0][1]);
}
}
将打印:
hi