V Javě je „ ClassCastException ” pomáhá identifikovat problémy s kompatibilitou typů za běhu tím, že umožňuje vývojářům je zachytit v rané fázi vývoje. Zajišťuje také bezpečnost typu a zabraňuje nesrovnalostem v programu. ClassCastException hodně pomáhá v procesu ladění, testování, správného přetypování atd.
Tato příručka ukazuje postup řešení ClassCastException v jazyce Java.
Jak v Javě vzniká výjimka ClassCastException?
' ClassCastException ” zajišťuje správné přetypování a zabraňuje běhovým chybám způsobeným nekompatibilními převody typů. Jednoduše řečeno, tato výjimka je vyvolána, když se objekt pokusí přetypovat na nekompatibilní typ.
Například navštivte níže uvedený kód o „ ClassCastException “ v Javě:
import java.io.* ;
import java.lang.* ;
import java.util.* ;
třída LinuxHint {
//Vytvoření třídy ovladače
veřejnost statický prázdnota hlavní ( Tětiva [ ] argumenty )
{
Snaž se {
Objekt rodič = Nový Objekt ( ) ;
Tětiva dítě = ( Tětiva ) rodič ;
Systém . ven . println ( dítě ) ;
}
chytit ( Výjimka F ) {
Systém . ven . println ( F ) ;
}
}
}
Vysvětlení výše uvedeného kódu:
- V ' Snaž se 'blok, instance objektu' rodič “ se deklaruje pomocí „ Nový “.
- Poté se používá typové obsazení, ve kterém „ objekt ” typ je přetypován a má název “ dítě “.
- Toto přetypování porušuje pravidlo, že nadřazená třída nesmí být přetypována do své podřízené třídy. Proto vzniká výjimka, protože „ objekt ” je rodičovská třída.
- Nakonec „ chytit 'používá se blok, který bere' Výjimka ” jako parametr a vytiskne zprávu na konzoli.
Po skončení prováděcí fáze:
Výše uvedený snímek ukazuje výskyt ClassCastException v Javě.
Jak vyřešit ClassCastException v Javě?
Používají se tři možná řešení, která může vývojář snadno vyřešit nebo se vyhnout možnosti zvýšit „ ClassCastException “ v Javě.
Tato řešení jsou popsána níže samostatně:
Řešení 1: Použití operátora „instanceof“.
' instanceof Operátor ověří, zda je objekt ” je nebo není instancí požadovaného typu. Toto ověření pomáhá předcházet výskytu „ ClassCastException “. Navštivte například níže uvedený blok kódu:
veřejnost třída TypeCheckingLinuxHint {veřejnost statický prázdnota hlavní ( Tětiva [ ] argumenty ) {
Objekt rodič = 'LinuxHint Family' ;
-li ( rodič instanceof Tětiva ) {
Tětiva dítě = ( Tětiva ) rodič ;
Systém . ven . println ( 'Po přetypování řetězce: ' + dítě ) ;
} jiný {
Systém . ven . println ( 'Object je instancí požadovaného typu String.' ) ;
}
}
}
Vysvětlení výše uvedeného kódu:
- Za prvé, „ rodič “ je vytvořen objekt, který je inicializován fiktivní hodnotou uvnitř “ Snaž se ”blok.
- Poté použijte 'li' prohlášení, ve kterém „ instanceof Operátor ' se používá ke kontrole instance ' rodič 'objekt s požadovaným' Tětiva “typ.
- Dále, pokud se podmínka vrátí „ skutečný ” se provede přetypování a zobrazí se na konzole.
- V opačném případě se na konzole zobrazí vlastní chybová zpráva.
Po skončení prováděcí fáze:
Snímek ukazuje, že přetypování bylo úspěšně provedeno a ClassCastException je vyřešen pomocí „ instanceof “ operátor.
Řešení 2: Kontrola a správná operace typového odlitku
Dalším řešením je zkontrolovat kód vícekrát a zkontrolovat kompatibilní typy pro přetypování. Například navštivte níže uvedený kód, ve kterém je „ ClassCastException ” je zatčen kvůli nekompatibilnímu požadovanému typu pro přetypování:
veřejnost třída TypeCheckLinuxHint {veřejnost statický prázdnota hlavní ( Tětiva [ ] argumenty ) {
Objekt rodič = 'LinuxHint Family' ;
Celé číslo convertNumber = ( Celé číslo ) rodič ;
Systém . ven . println ( 'Číslo po přetypování:' + convertNumber ) ;
}
}
Ve výše uvedeném kódu programátor nesprávně přetypoval „ Tětiva “ až “ Celé číslo “.
Po skončení fáze kompilace:
Výše uvedený snímek ukazuje výskyt ClassCastException.
Řešení 3: Použití generických léků
Programátoři mohou použít „ generika ” specifikovat očekávané typy a vynutit bezpečnost typu v době kompilace.
Navštivte například níže uvedený kód:
import java.util.ArrayList ;import java.util.List ;
veřejnost třída pomocí Generics {
veřejnost statický prázdnota hlavní ( Tětiva [ ] argumenty ) {
Seznam < Tětiva > empName = Nový ArrayList <> ( ) ;
empName. přidat ( 'Harry' ) ;
empName. přidat ( 'Hrnčíř' ) ;
Tětiva Počáteční = empName. dostat ( 0 ) ;
Tětiva Finále = empName. dostat ( 1 ) ;
Systém . ven . println ( 'Jméno: ' + Počáteční ) ;
Systém . ven . println ( 'Druhé jméno: ' + Finále ) ;
}
}
Vysvětlení výše uvedeného kódu:
- Nejprve se do souboru Java importují požadované nástroje a třída „ pomocí Generics “ je prohlášeno.
- Dále, „ ArrayList 'typu' Tětiva “ je deklarováno názvem “ empName “ a inicializován poskytnutím dvou fiktivních datových prvků.
- Poté vytvořte dvě proměnné typu String s názvem „ Počáteční ' a ' Finále “. Poté přiřaďte hodnoty přístupem k indexovým číslům.
- Nakonec zobrazte obě proměnné, abyste viděli výsledek.
Po ukončení provádění vypadá výstup takto:
Výše uvedený snímek ukazuje, že typové obsazení bylo provedeno pomocí generik.
Závěr
K vyřešení problému „ ClassCastException ” v Javě musí programátor zajistit správnou typovou kompatibilitu, použití “ generika “ a „ instanceof “ operátor. K vyřešení výjimky musí programátor zkontrolovat a opravit operaci lití zajištěním správné kompatibility typu. Navíc tato „ ClassCastException “ se lze vyhnout použitím “ generika “ a s použitím „ instanceof “ operátor. Tato příručka demonstrovala metodu řešení ClassCastException v Javě.