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.