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

Barbara Streisand
リリース: 2024-11-01 10:49:02
オリジナル
836 人が閲覧しました

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!