我有一个函数,它将参数作为一个不确定数量的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
。
为什么?
答案 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[]
。