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 に答える