Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/206.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 传递对象数组,而不是不确定数量的对象_Java_Android - Fatal编程技术网

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

Java 传递对象数组,而不是不确定数量的对象,java,android,Java,Android,我有一个函数,它以不确定数量的ImageButtons作为参数 private void addButtons(ImageButton... ib) { // ... } 因此,如果我想这样称呼它,这是完美的: addButtons(button1, button2, button3); 但现在我碰巧不得不使用未知数量的对象作为参数,例如数组。在addButtons内部,ImageButton参数用作数组,因此我尝试了以下方法: ArrayList<ImageButton> ib

我有一个函数,它以不确定数量的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

为什么?

实际上,toArray方法返回一个对象[]

您必须使用重载方法

你应使用:

addButtons(ibs.toArray(new ImageButton[ibs.size()]));
使用重载的toArray方法,可以在其中指定数组类型

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

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

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

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

除非你给它传递一个正确类型的数组,否则它只能返回一个对象[]。

你的意思是:ibs.toArraynew ImageButton[ibs.size]ZouZou在Android上我找不到toArrayint x,没有这样的函数。@Beppi是这样的吗?谢谢你,它工作了!!!我用它。无论如何,我仍然不明白为什么:它清楚地表明不需要指定数组:返回一个包含此ArrayList中包含的所有元素的数组。如果指定的数组足够大以容纳元素,则使用指定的数组,否则将创建相同类型的数组。@Beppi的toArray返回Object[],但toArraynew ImageButton[…]返回ImageButton[],而addButtons则期望ImageButton[]只是迂腐而已。。。。数组类型与泛型和擦除无关。这在那之前是真的:@rolfl:是的,但这是意料之中的。你会期望一个通用的集合能够像C Cant一样做到这一点。这是真的,没有帮助,它就不能正常工作,这是违反直觉的——通过擦除,“直觉”信息消失了……这很聪明。我不需要指定尺寸。