V Jave je „ ClassCastException ” pomáha identifikovať problémy s kompatibilitou typov za behu tým, že umožňuje vývojárom zachytiť ich už vo fáze vývoja. Zabezpečuje tiež typovú bezpečnosť, čím zabraňuje nezrovnalostiam v programe. ClassCastException veľmi pomáha v procese ladenia, testovania, správneho pretypovania atď.
Táto príručka ukazuje postup riešenia ClassCastException v jazyku Java.
Ako vzniká výnimka ClassCast v jazyku Java?
' ClassCastException ” zaisťuje správne pretypovanie a zabraňuje chybám za behu spôsobeným nekompatibilnými prevodmi typov. Zjednodušene povedané, táto výnimka sa vyvolá, keď sa objekt pokúsi pretypovať na nekompatibilný typ.
Navštívte napríklad nižšie uvedený kód o „ ClassCastException “ v jazyku Java:
importovať java.io.* ;
importovať java.lang.* ;
importovať java.util.* ;
trieda LinuxHint {
//Vytvorenie triedy ovládačov
verejnosti statické neplatné Hlavná ( Reťazec [ ] args )
{
skúste {
Objekt rodič = Nový Objekt ( ) ;
Reťazec dieťa = ( Reťazec ) rodič ;
Systém . von . println ( dieťa ) ;
}
chytiť ( Výnimka f ) {
Systém . von . println ( f ) ;
}
}
}
Vysvetlenie vyššie uvedeného kódu:
- V ' skúste 'blok, inštancia objektu' rodič “ sa deklaruje použitím „ Nový kľúčové slovo.
- Potom sa používa typcasting, v ktorom sa „ objekt ” typ sa typuje a má názov “ dieťa “.
- Toto typové obsadenie porušuje pravidlo, že rodičovská trieda nesmie byť typizovaná do svojej podradenej triedy. Preto vzniká výnimka, pretože „ objekt ” je nadradená trieda.
- Na záver, „ chytiť “ používa sa blok, ktorý zaberá “ Výnimka ” ako parameter a vytlačí správu na konzole.
Po ukončení vykonávacej fázy:
Vyššie uvedená snímka ukazuje výskyt ClassCastException v jazyku Java.
Ako vyriešiť výnimku ClassCastException v jazyku Java?
Používajú sa tri možné riešenia, ktoré môže vývojár ľahko vyriešiť alebo sa vyhnúť možnosti zvýšiť „ ClassCastException “ v jazyku Java.
Tieto riešenia sú popísané nižšie samostatne:
Riešenie 1: Použitie operátora „instanceof“.
' instanceof “ operátor overí, či “ objekt ” je alebo nie je inštanciou požadovaného typu. Toto overenie pomáha predchádzať výskytu „ ClassCastException “. Navštívte napríklad nižšie uvedený blok kódu:
verejnosti trieda TypeCheckingLinuxHint {verejnosti statické neplatné Hlavná ( Reťazec [ ] args ) {
Objekt rodič = 'LinuxHint Family' ;
ak ( rodič instanceof Reťazec ) {
Reťazec dieťa = ( Reťazec ) rodič ;
Systém . von . println ( 'Po pretypovaní reťazca: ' + dieťa ) ;
} inak {
Systém . von . println ( 'Object je inštanciou požadovaného typu String.' ) ;
}
}
}
Vysvetlenie vyššie uvedeného kódu:
- Po prvé, „ rodič Vytvorí sa objekt, ktorý je inicializovaný s fiktívnou hodnotou vo vnútri „ skúste “blok.
- Potom použite 'ak' vyhlásenie, v ktorom sa „ instanceof Operátor ' sa používa na kontrolu inštancie ' rodič “objekt s požadovaným” Reťazec typ “.
- Ďalej, ak sa podmienka vráti „ pravda ” sa vykoná typové obsadenie a zobrazí sa na konzole.
- V opačnom prípade sa na konzole zobrazí vlastné chybové hlásenie.
Po ukončení vykonávacej fázy:
Snímka ukazuje, že typcasting je úspešne vykonaný a ClassCastException je vyriešená pomocou „ instanceof ” operátor.
Riešenie 2: Kontrola a správna operácia typového odliatku
Ďalším riešením je skontrolovať kód viackrát a skontrolovať kompatibilné typy na typové obsadenie. Navštívte napríklad nižšie uvedený kód, v ktorom je „ ClassCastException “ je zatknutý kvôli nekompatibilnému požadovanému typu na typizáciu:
verejnosti trieda TypeCheckLinuxHint {verejnosti statické neplatné Hlavná ( Reťazec [ ] args ) {
Objekt rodič = 'LinuxHint Family' ;
Celé číslo convertNumber = ( Celé číslo ) rodič ;
Systém . von . println ( 'Číslo po typizácii: ' + convertNumber ) ;
}
}
Vo vyššie uvedenom kóde programátor nesprávne odovzdal „ Reťazec “ až “ Celé číslo “.
Po skončení fázy kompilácie:
Vyššie uvedená snímka ukazuje výskyt ClassCastException.
Riešenie 3: Použitie generík
Programátori môžu použiť „ generiká ” na špecifikáciu očakávaných typov a vynútenie typovej bezpečnosti v čase kompilácie.
Navštívte napríklad nasledujúci kód:
importovať java.util.ArrayList ;importovať java.util.List ;
verejnosti trieda pomocou generík {
verejnosti statické neplatné Hlavná ( Reťazec [ ] args ) {
Zoznam < Reťazec > empName = Nový ArrayList <> ( ) ;
empName. pridať ( 'Harry' ) ;
empName. pridať ( 'potter' ) ;
Reťazec Počiatočné = empName. dostať ( 0 ) ;
Reťazec Finálny = empName. dostať ( 1 ) ;
Systém . von . println ( 'Krstné meno: ' + Počiatočné ) ;
Systém . von . println ( 'Druhé meno: ' + Finálny ) ;
}
}
Vysvetlenie vyššie uvedeného kódu:
- Najprv sa do súboru Java naimportujú požadované nástroje a trieda „ pomocou generík “ je vyhlásené.
- Ďalej, „ ArrayList 'typu' Reťazec “ je deklarovaný názvom “ empName “ a inicializuje sa poskytnutím dvoch fiktívnych dátových prvkov.
- Potom vytvorte dve premenné typu String s názvom „ Počiatočné “ a „ Finálny “. Potom priraďte hodnoty prístupom k indexovým číslam.
- Nakoniec zobrazte obe premenné, aby ste videli výsledok.
Po ukončení vykonávania vyzerá výstup takto:
Vyššie uvedená snímka ilustruje, že typové obsadenie bolo vykonané pomocou generík.
Záver
Na vyriešenie problému „ ClassCastException ” v Jave musí programátor zabezpečiť správnu typovú kompatibilitu, použitie “ generiká “ a „ instanceof ” operátor. Na vyriešenie výnimky musí programátor skontrolovať a opraviť operáciu odlievania zabezpečením správnej kompatibility typu. Navyše táto „ ClassCastException “ sa dá vyhnúť použitím “ generiká “ a s použitím „ instanceof ” operátor. Táto príručka demonštrovala metódu riešenia ClassCastException v jazyku Java.