ホームページ  >  記事  >  Java  >  `toArray()` の結果を `String[]` にキャストすると、なぜ `ClassCastException` が発生するのでしょうか?

`toArray()` の結果を `String[]` にキャストすると、なぜ `ClassCastException` が発生するのでしょうか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-02 04:03:03421ブラウズ

Why does casting `toArray()` result to `String[]` cause a `ClassCastException`?

toArray() の結果を String[] に変換できません

次のコードは、行 3 で常に 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 に要素が含まれているかどうか、またはそのコンテンツのみが含まれているかどうかに関係なく発生します。文字列で構成されます。この動作はどのように説明されますか?

Resolution

toArray() は Object[] を返しますが、Object[ の要素であっても String[] に直接キャストすることはできません。 ]は文字列です。これは、ジェネリックスがコンパイル時にのみ実装され、実行時には存在しないためです。その結果、toArray() は目的の配列型を判断できません。

この問題を修正するには、次の修正コードを使用します。

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

このバージョンでは、正しい型の配列が作成されます ( String[]) を適切な長さに設定し、ClassCastException.

を排除します。

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

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