2018.7.11

ListやMapのtoArray()でClassCastExceptionが発生した際の対応

JavaでListやMapからtoArray()で文字列の配列にキャストしようとしたエラーが出たので、その時のメモです。(String[])のような単純なキャストはNGなんですね。

コード

以下のコードでは(String[])のキャスト時にエラー「java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String;」が発生して処理が落ちます。


List<String> list= new ArrayList<String>();
list.add("a1");
list.add("a2");
list.add("a3");
list.add("b1");
list.add("b2");

String[] arr = (String[])list.toArray();    // 「ClassCastException」が発生して処理が落ちる

for(int i = 0; i < arr.length; i++) {
    System.out.println(arr[i]);
}

エラーを発生させずにキャストさせるには、以下のようなコードで行うようです。


List<String> list= new ArrayList<String>();
list.add("a1");
list.add("a2");
list.add("a3");
list.add("b1");
list.add("b2");

String[] arr = list.toArray(new String[list.size()]);

for(int i = 0; i < arr.length; i++) {
    System.out.println(arr[i]);
}

// 実行結果)
// a1
// a2
// a3
// b1
// b2

参考リンク

Java】関連記事