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