传递一组对象而不是不确定数量的对象

时间:2013-11-04 16:41:39

标签: java android

我有一个函数,它将参数作为一个不确定数量的ImageButtons。

private void addButtons(ImageButton... ib) {
// ...
}

如果我想以这种方式调用它,那么这是完美的:

addButtons(button1, button2, button3);

但现在我发现我必须使用未知数量的对象作为参数,例如数组。在addButtons里面,ImageButton参数被用作数组,所以我尝试了这个:

ArrayList<ImageButton> ibs = new ArrayList<ImageButton>();
// feed the ibs ArrayList
addButtons((ImageButton[])ibs.toArray());

我得到ClassCastException

为什么?

3 个答案:

答案 0 :(得分:5)

实际上,方法toArray()会返回Object[]

您必须使用重载方法toArray(T[])

您应该使用:

addButtons(ibs.toArray(new ImageButton[ibs.size()]));

答案 1 :(得分:1)

使用重载的toArray()方法,您可以在其中指定数组类型。

addButtons(ibs.toArray(new ImageButton[0]));

您可以根据需要指定尺寸。如果不这样做,该方法将在添加元素之前创建一个更大的数组。

答案 2 :(得分:1)

由于类型擦除,通用集合无法创建强类型数组,除非您提供帮助:

addButtons(ibs.toArray(new ImageButton[ibs.size()]));

除非您传递正确类型的数组,否则它只能返回Object[]