Heim > Java > javaLernprogramm > Warum verursacht die Umwandlung des Ergebnisses „toArray()' in „String[]' eine „ClassCastException'?

Warum verursacht die Umwandlung des Ergebnisses „toArray()' in „String[]' eine „ClassCastException'?

Barbara Streisand
Freigeben: 2024-11-02 04:03:03
Original
451 Leute haben es durchsucht

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

ToArray()-Ergebnis konnte nicht in String[] konvertiert werden

Der folgende Code löst in Zeile 3 regelmäßig eine ClassCastException aus:

<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>
Nach dem Login kopieren

Dieser Fehler bleibt bestehen, unabhängig davon, ob v2 irgendwelche Elemente enthält oder ob sein Inhalt ausschließlich aus Zeichenfolgen besteht. Was erklärt dieses Verhalten?

Auflösung

toArray() gibt ein Object[] zurück, das nicht direkt in einen String[] umgewandelt werden kann, selbst wenn die Elemente in Object[ ] sind Zeichenfolgen. Dies liegt daran, dass Generika nur zur Kompilierungszeit implementiert werden und zur Laufzeit nicht vorhanden sind. Daher kann toArray() den beabsichtigten Array-Typ nicht ermitteln.

Um dieses Problem zu beheben, verwenden Sie den folgenden geänderten Code:

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

Diese Version erstellt ein Array des richtigen Typs ( String[]) mit der entsprechenden Länge, wodurch die ClassCastException eliminiert wird.

Das obige ist der detaillierte Inhalt vonWarum verursacht die Umwandlung des Ergebnisses „toArray()' in „String[]' eine „ClassCastException'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage