ClassCastException: Arrays $ ArrayList nem dobható át az ArrayList-be

1. Bemutatkozás

ClassCastException futásidejű kivétel, amelyet Java-ban emeltünk ki, amikor megpróbáljuk helytelenül dobott osztályt egyik típusból a másikba. Azt dobják, hogy jelezze, hogy a kód megpróbált objektumot átadni egy kapcsolódó osztálynak, de ez nem példány.

A Java-kivételek részletesebb bemutatásához tekintse meg itt.

2. ClassCastException részletek

Először vessünk egy pillantást egy egyszerű példára. Vegye figyelembe a következő kódrészletet:

Karakterlánc [] strArray = új karakterlánc [] {"John", "Snow"}; ArrayList strList = (ArrayList) Arrays.asList (strArray); System.out.println ("Karakterlista:" + strList);

A fenti kód okozza ClassCastException hova vesszük a visszatérési értékét Arrays.asList (strArray) egy Tömb lista.

Ennek oka az, hogy bár a statikus módszer Arrays.asList () visszatér a Lista,futásig nem tudjuk pontosan, hogy milyen implementáció adódik vissza. Tehát fordításkor a fordító sem tudhatja, és engedélyezi a szereplőket.

Amikor a kód fut, akkor a tényleges megvalósítást ellenőrizzük, amely ezt megtalálja Tömbök.asList() egy Tömbök $ List így okozva a ClassCastException.

3. Felbontás

Egyszerűen kijelenthetjük Tömb lista mint a Lista a kivétel elkerülése érdekében:

StrList = tömbök.asList (strArray); System.out.println ("Karakterlista:" + strList);

Referenciánkat a-ként nyilvánítva azonban Lista kijelölhetjük bármely osztály, amely végrehajtja a Lista felület, beleértve a Tömbök $ ArrayList visszaadta a metódus hívása.

4. Összefoglalás

Ebben a cikkben láttuk a magyarázatot arra, hogy mi is pontosan a ClassCastException és milyen intézkedéseket kell tennünk ennek megoldására.

A teljes kód megtalálható a GitHub oldalon.