Jak rozwiązać wyjątek ClassCastException w Javie?

Jak Rozwiazac Wyjatek Classcastexception W Javie



W Javie „ ClassCastException ” pomaga identyfikować problemy ze zgodnością typów w czasie wykonywania, umożliwiając programistom wykrycie ich na wczesnym etapie rozwoju. Zapewnia również bezpieczeństwo typów, zapobiegając niespójnościom w programie. ClassCastException bardzo pomaga w procesie debugowania, testowania, poprawnego rzutowania typów itp.

W tym przewodniku przedstawiono procedurę rozwiązania wyjątku ClassCastException w Javie.







Jak powstaje wyjątek ClassCastException w Javie?

ClassCastException ” zapewnia prawidłowe rzutowanie typów i zapobiega błędom czasu wykonywania spowodowanym niekompatybilnymi konwersjami typów. Mówiąc prościej, ten wyjątek jest zgłaszany, gdy obiekt próbuje zostać rzutowany na niezgodny typ.



Na przykład odwiedź poniższy kod dotyczący „ ClassCastException ” w Javie:



import java.io.* ;
import java.język.* ;
import java.util.* ;

klasa LinuxHint {
//Tworzenie klasy sterownika
publiczny statyczny próżnia główny ( Strunowy [ ] argumenty )
{
próbować {
Obiekt rodzic = nowy Obiekt ( ) ;

Strunowy dziecko = ( Strunowy ) rodzic ;
System . na zewnątrz . println ( dziecko ) ;
}
złapać ( Wyjątek F ) {
System . na zewnątrz . println ( F ) ;
}
}
}

Wyjaśnienie powyższego kodu:





  • W ' próbować ” blok, instancja obiektu “ rodzic ” deklaruje się za pomocą „ nowy słowo kluczowe.
  • Następnie stosuje się typowanie, w którym „ obiekt ” typ jest rzutowany i ma nazwę „ dziecko ”.
  • To rzutowanie na typ narusza zasadę, że klasa nadrzędna nie może być rzutowana na swoją klasę podrzędną. Dlatego powstaje wyjątek, ponieważ „ obiekt ” jest klasą nadrzędną.
  • W końcu „ złapać ” używany jest blok, który zajmuje „ Wyjątek ” jako parametr i wypisuje komunikat na konsoli.

Po zakończeniu fazy wykonawczej:



Powyższa migawka pokazuje występowanie wyjątku ClassCastException w Javie.

Jak rozwiązać wyjątek ClassCastException w Javie?

Stosowane są trzy możliwe rozwiązania, które programista może łatwo rozwiązać lub uniknąć szansy na podniesienie „ ClassCastException ” w Jawie.

Rozwiązania te opisano poniżej osobno:

Rozwiązanie 1: Użycie operatora „instanceof”.

wystąpienie ” operator sprawdza, czy „ obiekt ” jest instancją żądanego typu lub nie. Ta weryfikacja pomaga zapobiegać występowaniu „ ClassCastException ”. Na przykład odwiedź poniższy blok kodu:

publiczny klasa TypeCheckingLinuxHint {
publiczny statyczny próżnia główny ( Strunowy [ ] argumenty ) {

Obiekt rodzic = „Rodzina LinuxHint” ;
Jeśli ( rodzic wystąpienie Strunowy ) {
Strunowy dziecko = ( Strunowy ) rodzic ;
System . na zewnątrz . println ( „Po typowaniu ciągu znaków:” + dziecko ) ;
} w przeciwnym razie {
System . na zewnątrz . println ( „Obiekt jest instancją żądanego typu String”. ) ;
}
}
}

Wyjaśnienie powyższego kodu:

  • Po pierwsze ' rodzic ” tworzony jest obiekt, który jest inicjowany wartością fikcyjną wewnątrz „ próbować ' blok.
  • Następnie użyj 'Jeśli' oświadczenie, w którym „ wystąpienie Operator ” służy do sprawdzania instancji „ rodzic ” obiekt z pożądanym „ Strunowy ' typ.
  • Następnie, jeśli warunek zwróci „ PRAWDA ” rzutowanie jest wykonywane i wyświetlane na konsoli.
  • W przeciwnym razie na konsoli zostanie wyświetlony niestandardowy komunikat o błędzie.

Po zakończeniu fazy wykonawczej:

Migawka pokazuje, że rzutowanie typów zostało pomyślnie wykonane, a wyjątek ClassCastException został rozwiązany przy użyciu „ wystąpienie operatora.

Rozwiązanie 2: Przejrzyj i popraw operację rzutowania

Innym rozwiązaniem jest wielokrotne sprawdzanie kodu i przeglądanie zgodnych typów do rzutowania typów. Na przykład odwiedź poniższy kod, w którym „ ClassCastException ” zostaje aresztowany z powodu niezgodności pożądanego typu do rzutowania:

publiczny klasa TypCheckLinuxHint {
publiczny statyczny próżnia główny ( Strunowy [ ] argumenty ) {
Obiekt rodzic = „Rodzina LinuxHint” ;
Liczba całkowita przekonwertowana liczba = ( Liczba całkowita ) rodzic ;
System . na zewnątrz . println ( „Liczba po typowaniu:” + przekonwertowana liczba ) ;
}
}

W powyższym kodzie programista błędnie rzucił „ Strunowy ' Do ' Liczba całkowita ”.

Po zakończeniu fazy kompilacji:

Powyższa migawka pokazuje występowanie wyjątku ClassCastException.

Rozwiązanie 3: Stosowanie leków generycznych

Programiści mogą używać „ leki generyczne ”, aby określić oczekiwane typy i wymusić bezpieczeństwo typów w czasie kompilacji.

Na przykład odwiedź poniższy kod:

import java.util.ArrayList ;
import java.util.List ;

publiczny klasa przy użyciu Generics {
publiczny statyczny próżnia główny ( Strunowy [ ] argumenty ) {
Lista < Strunowy > nazwa_emp = nowy lista tablic <> ( ) ;
nazwa_emp. dodać ( 'Złupić' ) ;
nazwa_emp. dodać ( 'Garncarz' ) ;

Strunowy Wstępny = nazwa_emp. Dostawać ( 0 ) ;
Strunowy Finał = nazwa_emp. Dostawać ( 1 ) ;

System . na zewnątrz . println ( 'Imię: ' + Wstępny ) ;
System . na zewnątrz . println ( 'Drugie imię: ' + Finał ) ;
}
}

Wyjaśnienie powyższego kodu:

  • Najpierw wymagane narzędzia są importowane do pliku Java, a klasa „ przy użyciu Generics ” jest zadeklarowane.
  • Następnie „ lista tablic „typu” Strunowy ” jest zadeklarowana z nazwą „ nazwa_emp ” i zainicjowany przez podanie dwóch fikcyjnych elementów danych.
  • Następnie utwórz dwie zmienne typu String o nazwie „ Wstępny ' I ' Finał ”. Następnie przypisz wartości, uzyskując dostęp do numerów indeksów.
  • Na koniec wyświetl obie zmienne, aby zobaczyć wynik.

Po zakończeniu wykonywania wynik wygląda następująco:

Powyższa migawka ilustruje, że rzutowanie typów zostało wykonane przy użyciu generycznych.

Wniosek

Aby rozwiązać problem „ ClassCastException ” w Javie programista musi zapewnić odpowiednią kompatybilność typów, użycie „ leki generyczne ” i „ wystąpienie operatora. Aby usunąć wyjątek, programista musi przejrzeć i poprawić operację rzutowania, zapewniając odpowiednią zgodność typu. Co więcej, ten „ ClassCastException ” można uniknąć, używając „ leki generyczne ” i za pomocą „ wystąpienie operatora. W tym przewodniku zademonstrowano metodę rozwiązania wyjątku ClassCastException w Javie.