ClassCastException: Nizovi $ ArrayList ne mogu se prebaciti na ArrayList
1. Uvod
ClassCastException je runtime iznimka pokrenuta u Javi kada to pokušamo nepropisno prebacili razred iz jednog u drugi tip. Baca se kako bi se naznačilo da je kôd pokušao prebaciti objekt u povezanu klasu, ali čiji slučaj nije.
Za detaljniji uvod u iznimke na Javi pogledajte ovdje.
2. Pojedinosti o ClassCastException
Prvo, pogledajmo jednostavan primjer. Razmotrite sljedeći isječak koda:
String [] strArray = new String [] {"John", "Snow"}; ArrayList strList = (ArrayList) Arrays.asList (strArray); System.out.println ("Popis nizova:" + strList);
Gornji kod uzrokuje ClassCastException gdje bacimo povratnu vrijednost od Arrays.asList (strArray) do an ArrayList.
Razlog je taj što iako je statička metoda Arrays.asList () vraća a Popis,ne znamo dok se izvršava točno koja se implementacija vraća. Dakle, u vrijeme kompajliranja prevoditelj ne može znati ni jedno ni drugo i dopušta glumačku postavu.
Kada se kôd pokrene, provjerava se stvarna implementacija koja to pronalazi Nizovi.asList() vraća an Nizovi $ Popis uzrokujući tako a ClassCastException.
3. Razlučivost
Jednostavno možemo proglasiti svoje ArrayList kao Popis da izbjegnemo ovu iznimku:
Popis strList = Arrays.asList (strArray); System.out.println ("Popis nizova:" + strList);
Međutim, deklarirajući našu referencu kao Popis možemo dodijeliti bilo koja klasa koja implementira Popis sučelje, uključujući Nizovi $ ArrayList vraćen pozivom metode.
4. Sažetak
U ovom smo članku vidjeli objašnjenje što je zapravo ClassCastException i koje mjere moramo poduzeti kako bismo riješili ovaj problem.
Cjeloviti kod možete pronaći na GitHubu.