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!