ホームページ  >  記事  >  Java  >  Android で `String[]` にキャストするときに `List.toArray()` が `ClassCastException` をスローするのはなぜですか?

Android で `String[]` にキャストするときに `List.toArray()` が `ClassCastException` をスローするのはなぜですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-01 10:49:02826ブラウズ

Why Does `List.toArray()` Throw a `ClassCastException` in Android When Casting to `String[]`?

Android の (String[])List.toArray() での ClassCastException

ArrayList をキャストしようとしたときtoArray() メソッドを使用して String[] に変換すると、Android アプリでは一般的に ClassCastException が発生します。たとえば、次のコードはこのエラーをトリガーします。

<code class="java">final String[] v1 = i18nCategory.translation.get(id);
final ArrayList<String> v2 = new ArrayList<>(Arrays.asList(v1));
String[] v3 = (String[]) v2.toArray();</code>

これは、v2 の内容に関係なく (空の配列であっても) 発生します。

説明

このエラーは発生しますtoArray() は String[] ではなく Object[] を返すためです。ジェネリックはコンパイル時にのみ使用できるため、Java 仮想マシン (JVM) はどの配列タイプを作成するかを決定できません。したがって、デフォルトは Object[] になり、String[] にキャストすることはできません。

解決策

この問題を解決するには、toArray(T[] a) を使用して配列型を明示的に指定します。メソッドを使用し、目的の配列タイプをパラメータとして指定します。たとえば、このコードは String[]:

<code class="java">String[] v3 = v2.toArray(new String[v2.size()]);</code>

を正しく作成します。このメソッドにより、返される配列の型とサイズが正しいことが保証されます。

以上がAndroid で `String[]` にキャストするときに `List.toArray()` が `ClassCastException` をスローするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。