Heim  >  Artikel  >  Java  >  Warum löst „List.toArray()“ in Android beim Umwandeln in „String[]“ eine „ClassCastException“ aus?

Warum löst „List.toArray()“ in Android beim Umwandeln in „String[]“ eine „ClassCastException“ aus?

Barbara Streisand
Barbara StreisandOriginal
2024-11-01 10:49:02833Durchsuche

Why Does `List.toArray()` Throw a `ClassCastException` in Android When Casting to `String[]`?

ClassCastException bei (String[])List.toArray() in Android

Beim Versuch, eine ArrayList zu einem String[] mithilfe der toArray()-Methode hinzufügen, stoßen Android-Apps häufig auf eine ClassCastException. Beispielsweise löst der folgende Code diesen Fehler 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>

Dies geschieht unabhängig vom Inhalt von v2 (sogar einem leeren Array).

Erklärung

Dieser Fehler tritt auf weil toArray() ein Object[] zurückgibt, kein String[]. Generika sind nur zur Kompilierungszeit verfügbar, sodass die Java Virtual Machine (JVM) nicht bestimmen kann, welcher Array-Typ erstellt werden soll. Daher wird standardmäßig Object[] verwendet, das nicht in String[] umgewandelt werden kann.

Lösung

Um dieses Problem zu beheben, geben Sie den Array-Typ explizit mit toArray(T[] a) an. -Methode und geben Sie den gewünschten Array-Typ als Parameter an. Dieser Code erstellt beispielsweise korrekt einen String[]:

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

Diese Methode stellt sicher, dass das zurückgegebene Array den richtigen Typ und die richtige Größe hat.

Das obige ist der detaillierte Inhalt vonWarum löst „List.toArray()“ in Android beim Umwandeln in „String[]“ eine „ClassCastException“ aus?. 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