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