ClassCastException: Arrays $ ArrayList kan ikke kastes til ArrayList

1. Introduktion

ClassCastException er en runtime-undtagelse, der er rejst i Java, når vi prøver forkert kaste en klasse fra en type til en anden. Det kastes for at indikere, at koden har forsøgt at kaste et objekt til en relateret klasse, men som det ikke er en forekomst af.

For en mere detaljeret introduktion til undtagelser i Java, se her.

2. Detaljer om ClassCastException

Lad os først se på et simpelt eksempel. Overvej følgende kodestykke:

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

Ovenstående kode forårsager ClassCastException hvor vi kaster returværdien af Arrays.asList (strArray) til en ArrayList.

Årsagen er, at selv om den statiske metode Arrays.asList () returnerer a Liste,vi ved ikke før runtime nøjagtigt, hvilken implementering der returneres. Så på kompileringstidspunktet kan ikke compileren kende nogen af ​​dem og tillader rollebesætningen.

Når koden kører, kontrolleres den aktuelle implementering, som finder det Arrays.asList() returnerer en Arrays $ List derved forårsager en ClassCastException.

3. Opløsning

Vi kan simpelthen erklære vores ArrayList som en Liste for at undgå denne undtagelse:

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

Men ved at erklære vores reference som en Liste vi kan tildele enhver klasse, der implementerer Liste interface, herunder Arrays $ ArrayList returneres ved metodeopkaldet.

4. Resume

I denne artikel har vi set forklaringen på, hvad der præcist er en ClassCastException og hvilke foranstaltninger vi skal tage for at løse dette problem.

Den fulde kode kan findes på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found