Kaip išspręsti „ClassCastException“ problemą „Java“?

Kaip Isspresti Classcastexception Problema Java



Java programoje „ ClassCastException “ padeda nustatyti tipų suderinamumo problemas vykdymo metu, leisdama kūrėjams jas pastebėti ankstyvame kūrimo etape. Tai taip pat užtikrina tipo saugumą, užkertant kelią programos neatitikimams. „ClassCastException“ labai padeda derinant, atliekant testavimą, teisingo tipo liejimą ir kt.

Šiame vadove parodyta „ClassCastException“ sprendimo „Java“ procedūra.





Kaip „ClassCastException“ atsiranda „Java“?

ClassCastException “ užtikrina tinkamą tipo liejimą ir apsaugo nuo vykdymo klaidų, atsirandančių dėl nesuderinamų tipų konvertavimo. Paprastais žodžiais tariant, ši išimtis pašalinama, kai objektą bandoma perkelti į nesuderinamą tipą.



Pavyzdžiui, apsilankykite toliau pateiktame kode apie „ ClassCastException “ Java:



importuoti java.io.* ;
importuoti java.lang.* ;
importuoti java.util.* ;

klasė LinuxHint {
//Vairuotojų klasės sukūrimas
viešas statinis tuštuma pagrindinis ( Styga [ ] args )
{
bandyti {
Objektas tėvas = naujas Objektas ( ) ;

Styga vaikas = ( Styga ) tėvas ;
Sistema . išeiti . println ( vaikas ) ;
}
sugauti ( Išimtis f ) {
Sistema . išeiti . println ( f ) ;
}
}
}

Aukščiau pateikto kodo paaiškinimas:





  • Viduje ' bandyti 'blokas, objekto egzempliorius' tėvas “ yra deklaruojamas naudojant „ naujas “ raktažodis.
  • Po to naudojamas spausdinimas, kuriame „ objektas tipas yra perduodamas ir turi pavadinimą ' vaikas “.
  • Šis tipo siuntimas pažeidžia taisyklę, kad pagrindinė klasė neturi būti perduodama antrinei klasei. Štai kodėl atsiranda išimtis, nes „ objektas “ tipas yra tėvų klasė.
  • Pabaigoje „ sugauti 'Naudojamas blokas, kuris užima ' Išimtis “ kaip parametrą ir išspausdina pranešimą konsolėje.

Pasibaigus vykdymo etapui:



Aukščiau pateikta momentinė nuotrauka rodo ClassCastException atsiradimą Java.

Kaip išspręsti „ClassCastException“ problemą „Java“?

Naudojami trys galimi sprendimai, kuriuos kūrėjas gali lengvai išspręsti arba išvengti galimybės padidinti „ ClassCastException “ Java.

Šie sprendimai aprašyti toliau atskirai:

1 sprendimas: „Instanceof“ operatoriaus naudojimas

pavyzdys ' operatorius patikrina, ar ' objektas “ yra norimo tipo pavyzdys, ar ne. Šis patikrinimas padeda išvengti „ ClassCastException “. Pavyzdžiui, apsilankykite toliau pateiktame kodo bloke:

viešas klasė TypeCheckingLinuxHint {
viešas statinis tuštuma pagrindinis ( Styga [ ] args ) {

Objektas tėvas = 'LinuxHint šeima' ;
jeigu ( tėvas pavyzdys Styga ) {
Styga vaikas = ( Styga ) tėvas ;
Sistema . išeiti . println ( 'After typecasting String:' + vaikas ) ;
} Kitas {
Sistema . išeiti . println ( 'Objektas yra norimo tipo eilutės pavyzdys.' ) ;
}
}
}

Aukščiau pateikto kodo paaiškinimas:

  • Pirma, „ tėvas Sukuriamas objektas, kuris inicijuojamas su fiktyviąja verte „ bandyti “ blokas.
  • Tada naudokite 'jei' pareiškimas, kuriame „ pavyzdys “ operatorius naudojamas norint patikrinti „ tėvas 'objektas su norimu' Styga “ tipo.
  • Tada, jei būsena grįžta „ tiesa “ tipo siuntimas atliekamas ir rodomas konsolėje.
  • Kitu atveju konsolėje rodomas pasirinktinis klaidos pranešimas.

Pasibaigus vykdymo fazei:

Momentinė nuotrauka rodo, kad tipo siuntimas sėkmingai atliktas ir ClassCastException išspręsta naudojant ' pavyzdys ' operatorius.

2 sprendimas: peržiūrėkite ir ištaisykite tipo siuntimo operaciją

Kitas sprendimas yra kelis kartus patikrinti kodą ir peržiūrėti suderinamus tipus. Pavyzdžiui, apsilankykite toliau pateiktame kode, kuriame „ ClassCastException “ suimamas dėl nesuderinamo pageidaujamo tipo atspausdinimui:

viešas klasė TypeCheckLinuxHint {
viešas statinis tuštuma pagrindinis ( Styga [ ] args ) {
Objektas tėvas = 'LinuxHint šeima' ;
Sveikasis skaičius konvertuotasSkaičius = ( Sveikasis skaičius ) tėvas ;
Sistema . išeiti . println ( „Skaičius po rašymo:“ + konvertuotasSkaičius ) ;
}
}

Aukščiau pateiktame kode programuotojas neteisingai išleido „ Styga 'į' Sveikasis skaičius “.

Pasibaigus kompiliavimo etapui:

Aukščiau pateikta momentinė nuotrauka rodo ClassCastException įvykį.

3 sprendimas: generinių vaistų naudojimas

Programuotojai gali naudoti generiniai vaistai “, norėdami nurodyti numatomus tipus ir užtikrinti tipo saugumą kompiliavimo metu.

Pavyzdžiui, apsilankykite toliau pateiktu kodu:

importuoti java.util.ArrayList ;
importuoti java.util.List ;

viešas klasė naudojant Generics {
viešas statinis tuštuma pagrindinis ( Styga [ ] args ) {
Sąrašas < Styga > empName = naujas ArrayList <> ( ) ;
empName. papildyti ( 'Haris' ) ;
empName. papildyti ( 'Poteris' ) ;

Styga Pradinis = empName. gauti ( 0 ) ;
Styga Galutinis = empName. gauti ( 1 ) ;

Sistema . išeiti . println ( 'Pirmas vardas: ' + Pradinis ) ;
Sistema . išeiti . println ( 'Antrasis vardas: ' + Galutinis ) ;
}
}

Aukščiau pateikto kodo paaiškinimas:

  • Pirmiausia į „Java“ failą importuojamos reikalingos priemonės ir „klasė“ naudojant Generics “ – skelbiama.
  • Toliau „ ArrayList “ tipo “ Styga “ deklaruojamas pavadinimu “ empName “ ir inicijuojamas pateikiant du netikrus duomenų elementus.
  • Tada sukurkite du eilutės tipo kintamuosius pavadinimu ' Pradinis “ ir „ Galutinis “. Po to priskirkite reikšmes pasiekdami indekso numerius.
  • Galų gale parodykite abu kintamuosius, kad pamatytumėte rezultatą.

Pasibaigus vykdymui, išvestis atrodo taip:

Aukščiau pateikta momentinė nuotrauka iliustruoja, kad tipo siuntimas buvo atliktas naudojant bendruosius.

Išvada

Norėdami išspręsti „ ClassCastException ' Java programuotojas turi užtikrinti tinkamą tipų suderinamumą, naudoti ' generiniai vaistai ' ir ' pavyzdys ' operatorius. Kad išspręstų išimtį, programuotojas turi peržiūrėti ir ištaisyti liejimo operaciją, užtikrindamas tinkamą tipo suderinamumą. Be to, šis „ ClassCastException “ galima išvengti naudojant “ generiniai vaistai “ ir naudojant „ pavyzdys ' operatorius. Šiame vadove parodytas „Java“ „ClassCastException“ problemos sprendimo būdas.