ClassCastException: Arrays $ ArrayList kunnen niet naar ArrayList worden gecast

1. Inleiding

ClassCastException is een runtime-uitzondering die in Java wordt opgeworpen wanneer we dat proberen cast een klasse ten onrechte van het ene type naar het andere. Het wordt gegenereerd om aan te geven dat de code heeft geprobeerd een object naar een gerelateerde klasse te casten, maar waarvan het geen instantie is.

Kijk hier voor een meer diepgaande inleiding tot uitzonderingen in Java.

2. ClassCastException-details

Laten we eerst een eenvoudig voorbeeld bekijken. Beschouw het volgende codefragment:

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

De bovenstaande code veroorzaakt ClassCastException waar we de retourwaarde van casten Arrays.asList (strArray) aan een ArrayList.

De reden is dat hoewel de statische methode Arrays.asList () geeft een terug Lijst,we weten tot runtime niet precies welke implementatie wordt geretourneerd. Dus tijdens het compileren kan de compiler het ook niet weten en staat de cast toe.

Wanneer de code wordt uitgevoerd, wordt de daadwerkelijke implementatie gecontroleerd die dat vindt Arrays.asList() geeft een Arrays $ Lijst waardoor een ClassCastException.

3. Resolutie

We kunnen eenvoudig onze ArrayList als een Lijst om deze uitzondering te vermijden:

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

Door onze referentie echter als een Lijst we kunnen toewijzen elke klasse die het Lijst koppel, inclusief de Arrays $ ArrayList geretourneerd door de methodeaanroep.

4. Samenvatting

In dit artikel hebben we de uitleg gezien van wat precies een ClassCastException en welke maatregelen we moeten nemen om dit probleem op te lossen.

De volledige code is te vinden op GitHub.