当使用 Object[] 参数调用时,接受 vararg Object... 参数的函数不是模棱两可的吗?
Isn't function that accepts vararg Object... argument ambigous when called with Object[] param?
所以基本上从我在 Whosebug 上的搜索中,弹出了这个(如果错误请纠正我):
您可以这样定义接受可变参数(在本例中为任何对象)的函数:
public void varadric(Object... arguments) {
//I'm a dummy function
}
您可以使用任意数量的参数(扩展对象)调用此方法,您将在函数中得到一个参数 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
,这是否意味着它不能在可变参数中传递(以嵌套数组结尾?)?
想象以下具有更具体描述的场景:
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
}
有人能帮我说清楚吗?
嗯,有几个选项:
自己创建数组:
varadric(new Object[] { array })
声明一个 Object
类型的局部变量并让编译器将 that 包装在一个数组中:
Object tmp = array;
varadric(tmp);
上述的变体 - 只需施放:
varadric((Object) array);
但是,是的,您说得对,当出现 Object[]
类型的单个参数和声明为 Object... foo
的可变参数时,编译器 不会 将它包装起来,因为它不需要包装在一个数组中。
这将是一个二维数组。
此声明 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
所以基本上从我在 Whosebug 上的搜索中,弹出了这个(如果错误请纠正我):
您可以这样定义接受可变参数(在本例中为任何对象)的函数:
public void varadric(Object... arguments) { //I'm a dummy function }
您可以使用任意数量的参数(扩展对象)调用此方法,您将在函数中得到一个参数
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
,这是否意味着它不能在可变参数中传递(以嵌套数组结尾?)?
想象以下具有更具体描述的场景:
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
}
有人能帮我说清楚吗?
嗯,有几个选项:
自己创建数组:
varadric(new Object[] { array })
声明一个
Object
类型的局部变量并让编译器将 that 包装在一个数组中:Object tmp = array; varadric(tmp);
上述的变体 - 只需施放:
varadric((Object) array);
但是,是的,您说得对,当出现 Object[]
类型的单个参数和声明为 Object... foo
的可变参数时,编译器 不会 将它包装起来,因为它不需要包装在一个数组中。
这将是一个二维数组。
此声明 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