Jak vyřešit ClassCastException v Javě?

Jak Vyresit Classcastexception V Jave



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ě.