次のコード(Androidで実行)では、3行目に常にClassCastExceptionが表示されます。
final String[] v1 = i18nCategory.translation.get(id);
final ArrayList<String> v2 = new ArrayList<String>(Arrays.asList(v1));
String[] v3 = (String[])v2.toArray();
また、v2がObject [0]の場合、およびその中に文字列がある場合にも発生します。理由は何ですか?
これは、使用するときに
toArray()
これは、Object []を返します。Object[]はString []にキャストできません(内容がストリングであっても)。これは、toArrayメソッドが取得するのは
List
ではなく
List<String>
ジェネリックはソースコードのみのものであり、実行時には利用できないため、作成する配列のタイプを決定することはできません。
つかいます
toArray(new String[v2.size()]);
適切な種類の配列(String []および適切なサイズ)を割り当てます
間違ったtoArray()
を使用しています
Javaのジェネリックはほとんど構文糖衣であることを忘れないでください。 ArrayListは、そのすべての要素が文字列であることを実際には知りません。
問題を修正するには、 toArray(T[])
を呼び出します。あなたの場合、
_String[] v3 = v2.toArray(new String[v2.size()]);
_
汎用形式toArray(T[])
は_T[]
_を返すため、結果を明示的にキャストする必要はありません。
String[] str = new String[list.size()];
str = (String[]) list.toArray(str);
このように使用します。