ClassCastException: Arrays $ ArrayList können nicht in ArrayList umgewandelt werden

ClassCastException: Arrays $ ArrayList kann nicht in ArrayList umgewandelt werden

1. Einführung

ClassCastException ist eine Laufzeitausnahme, die in Java ausgelöst wird, wenn wir versuchen,improperly cast a class from one type to another.. Es wird ausgelöst, um anzuzeigen, dass der Code versucht hat, ein Objekt in eine verwandte Klasse umzuwandeln, von der es sich jedoch nicht um eine Instanz handelt.

Weitere Informationen zu Ausnahmen in Java finden Sie unterhere.

2. ClassCastException-Details

Schauen wir uns zunächst ein einfaches Beispiel an. Betrachten Sie das folgende Code-Snippet:

String[] strArray = new String[] { "John", "Snow" };
ArrayList strList = (ArrayList) Arrays.asList(strArray);
System.out.println("String list: " + strList);

Der obige Code verursachtClassCastException, wobei wir den Rückgabewert vonArrays.asList(strArray) inArrayList. umwandeln

Der Grund ist, dass obwohl die statische MethodeArrays.asList()List,we don’t know until runtime exactly what implementation is returned zurückgibt. Zur Kompilierungszeit kann der Compiler dies also auch nicht wissen und lässt die Umwandlung. zu

Wenn der Code ausgeführt wird, wird die tatsächliche Implementierung überprüft, wobei festgestellt wird, dassArrays.asList () einArrays$List zurückgibt, wodurch einClassCastException verursacht wird.

3. Auflösung

Wir können unsereArrayList einfach alsList deklarieren, um diese Ausnahme zu vermeiden:

List strList = Arrays.asList(strArray);
System.out.println("String list: " + strList);

Indem wir unsere Referenz alsList deklarieren, können wirany class that implements the List interface zuweisen, einschließlich derArrays$ArrayList, die vom Methodenaufruf zurückgegeben werden.

4. Zusammenfassung

In diesem Artikel haben wir die Erklärung gesehen, was genau einClassCastExceptionist und welche Maßnahmen wir ergreifen müssen, um dieses Problem zu beheben.

Der vollständige Code istover on GitHub.