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

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

Barbara Streisand
Barbara StreisandOriginal
2024-11-02 04:03:03327Durchsuche

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>

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>

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!

Stellungnahme:
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