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.