0

我有一个函数,它作为参数获取无限数量的 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.

为什么?

4

3 回答 3

5

实际上该方法toArray()返回一个Object[]

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

你应该使用:

addButtons(ibs.toArray(new ImageButton[ibs.size()]));
于 2013-11-04T16:43:06.470 回答
1

toArray()使用可以指定数组类型的重载方法。

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

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

于 2013-11-04T16:43:52.887 回答
1

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

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

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

于 2013-11-04T16:44:13.093 回答