ClassCastException: Arrays $ ArrayList kan ikke kastes til ArrayList

1. Introduksjon

ClassCastException er et runtime unntak hevet i Java når vi prøver å kaster en klasse fra en type til en annen. Det kastes for å indikere at koden har forsøkt å kaste et objekt til en relatert klasse, men som det ikke er en forekomst av.

For en mer inngående introduksjon til unntak i Java, ta en titt her.

2. Detaljer om ClassCastException

La oss først se på et enkelt eksempel. Vurder følgende kodebit:

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

Ovennevnte kode forårsaker ClassCastException der vi kaster returverdien av Arrays.asList (strArray) til en ArrayList.

Årsaken er at selv om den statiske metoden Arrays.asList () returnerer a Liste,vi vet ikke før kjøretiden nøyaktig hvilken implementering som returneres. Så på kompileringstidspunktet kan ikke kompilatoren vite noe av det og tillater rollebesetningen.

Når koden kjører, blir den faktiske implementeringen sjekket som finner det Arrays.asList() returnerer en Arrays $ List dermed forårsaker en ClassCastException.

3. Oppløsning

Vi kan ganske enkelt erklære vår ArrayList som en Liste for å unngå dette unntaket:

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

Imidlertid ved å erklære vår referanse som en Liste vi kan tildele hvilken som helst klasse som implementerer Liste grensesnitt, inkludert Arrays $ ArrayList returnert av metodeanropet.

4. Oppsummering

I denne artikkelen har vi sett forklaringen på hva som egentlig er en ClassCastException og hvilke tiltak vi må ta for å løse dette problemet.

Den fulle koden finner du på GitHub.