Kuidas lahendada Java-s ClassCastException?

Kuidas Lahendada Java S Classcastexception



Javas on ' ClassCastException ” aitab tuvastada tüüpide ühilduvusprobleeme käitusajal, võimaldades arendajatel neid arendusfaasis varakult tabada. Samuti tagab see tüübi ohutuse, vältides programmi ebakõlasid. ClassCastException aitab palju silumisel, testimisel, õige tüübi valamisel jne.

See juhend tutvustab ClassCastExceptioni lahendamise protseduuri Javas.







Kuidas ClassCastException Javas tekib?

' ClassCastException ” tagab õige tüübi ülekandmise ja väldib kokkusobimatutest tüübikonversioonidest põhjustatud käitusvigu. Lihtsamalt öeldes tehakse see erand juhul, kui objekti üritatakse üle kanda ühildumatusse tüüpi.



Näiteks külastage allolevat koodi „ ClassCastException ” Java keeles:



importida java.io.* ;
importida java.lang.* ;
importida java.util.* ;

klass LinuxHint {
//Juhiklassi loomine
avalik staatiline tühine peamine ( String [ ] args )
{
proovi {
Objekt lapsevanem = uus Objekt ( ) ;

String laps = ( String ) lapsevanem ;
Süsteem . välja . println ( laps ) ;
}
püüda ( Erand f ) {
Süsteem . välja . println ( f ) ;
}
}
}

Ülaltoodud koodi selgitus:





  • jaotises ' proovi 'plokk, objekti eksemplar' lapsevanem ' on deklareeritud, kasutades ' uus ” märksõna.
  • Pärast seda kasutatakse trükivormingut, mille puhul ' objektiks tüüp on trükitud ja selle nimi on ' laps ”.
  • See tüübiülekanne rikub reeglit, et ülemklassi ei tohi sisestada selle alamklassi. Sellepärast tekib erand, kuna ' objektiks ” tüüp on vanemklass.
  • Lõpuks ' püüda Kasutatakse plokki ', mis võtab ' Erand ” parameetrina ja prindib konsoolile teate.

Pärast täitmisfaasi lõppu:



Ülaltoodud hetktõmmis näitab ClassCastExceptioni esinemist Javas.

Kuidas lahendada Java-s ClassCastException?

Kasutatakse kolme võimalikku lahendust, mida arendaja saab hõlpsasti lahendada või vältida võimalust tõsta ' ClassCastException ” Java keeles.

Neid lahendusi kirjeldatakse allpool eraldi:

Lahendus 1: operaatori 'instanceof' kasutamine

' näide ' operaator kontrollib, kas ' objektiks ” on soovitud tüüpi eksemplar või mitte. See kontrollimine aitab vältida ' ClassCastException ”. Näiteks külastage allolevat koodiplokki:

avalik klass TypeCheckingLinuxHint {
avalik staatiline tühine peamine ( String [ ] args ) {

Objekt lapsevanem = 'LinuxHinti perekond' ;
kui ( lapsevanem näide String ) {
String laps = ( String ) lapsevanem ;
Süsteem . välja . println ( 'Pärast stringi kirjutamist:' + laps ) ;
} muidu {
Süsteem . välja . println ( 'Objekt on soovitud tüüpi String eksemplar.' ) ;
}
}
}

Ülaltoodud koodi selgitus:

  • Esiteks, ' lapsevanem ' luuakse objekt, mis initsialiseeritakse näivväärtusega ' proovi ” plokk.
  • Seejärel kasutage 'kui' avaldus, milles ' näide operaatorit kasutatakse eksemplari ' lapsevanem 'objekt soovitud' String ” tüüpi.
  • Järgmiseks, kui tingimus taastub ' tõsi ” sooritatakse tüübiülekanne ja kuvatakse see konsoolil.
  • Vastasel juhul kuvatakse konsoolil kohandatud veateade.

Pärast täitmisfaasi lõppu:

Hetktõmmis näitab, et tüübiülekanne on edukalt tehtud ja ClassCastException lahendatakse kasutades ' näide ” operaator.

Lahendus 2: vaadake üle ja tehke õiged tüübiedastustoimingud

Teine lahendus on kontrollida koodi mitu korda ja vaadata üle ühilduvad tüübid tüübiedastuse jaoks. Näiteks külastage allolevat koodi, milles ' ClassCastException ” arreteeritakse tüübiülekannete jaoks sobimatu soovitud tüübi tõttu:

avalik klass TypeCheckLinuxHint {
avalik staatiline tühine peamine ( String [ ] args ) {
Objekt lapsevanem = 'LinuxHinti perekond' ;
Täisarv konverteeritudNumber = ( Täisarv ) lapsevanem ;
Süsteem . välja . println ( 'Arv pärast trükkimist:' + konverteeritudNumber ) ;
}
}

Ülaltoodud koodis valis programmeerija valesti ' String ' kuni ' Täisarv ”.

Pärast koostamisfaasi lõppu:

Ülaltoodud hetktõmmis näitab ClassCastExceptioni esinemist.

Lahendus 3: geneeriliste ravimite kasutamine

Programmeerijad saavad kasutada geneerilised ravimid ', et täpsustada eeldatavaid tüüpe ja jõustada tüübi ohutust koostamise ajal.

Näiteks külastage allolevat koodi:

importida java.util.ArrayList ;
importida java.util.List ;

avalik klass kasutades Generics {
avalik staatiline tühine peamine ( String [ ] args ) {
Nimekiri < String > empName = uus ArrayList <> ( ) ;
empName. lisama ( 'Harry' ) ;
empName. lisama ( 'Potter' ) ;

String Esialgne = empName. saada ( 0 ) ;
String Lõplik = empName. saada ( 1 ) ;

Süsteem . välja . println ( 'Eesnimi: ' + Esialgne ) ;
Süsteem . välja . println ( 'Teine nimi: ' + Lõplik ) ;
}
}

Ülaltoodud koodi selgitus:

  • Esiteks imporditakse vajalikud utiliidid Java-faili ja klass ' kasutades Generics ” kuulutatakse välja.
  • Järgmiseks ' ArrayList ' tüüpi ' String ' on deklareeritud nimega ' empName ” ja lähtestatakse kahe näiva andmeelemendi pakkumisega.
  • Seejärel looge kaks string-tüüpi muutujat nimega ' Esialgne ” ja „ Lõplik ”. Pärast seda määrake väärtused, avades indeksi numbrid.
  • Lõpuks kuvage tulemuse nägemiseks mõlemad muutujad.

Pärast täitmise lõppu näeb väljund välja järgmine:

Ülaltoodud hetktõmmis illustreerib, et tüübiülekanne on teostatud geneeriliste ravimite abil.

Järeldus

Et lahendada ' ClassCastException ” Java puhul peab programmeerija tagama õige tüüpi ühilduvuse, kasutades „ geneerilised ravimid ' ja ' näide ” operaator. Erandi lahendamiseks peab programmeerija casting-toimingu üle vaatama ja parandama, tagades õige tüübi ühilduvuse. Veelgi enam, see ' ClassCastException ' saab vältida kasutades ' geneerilised ravimid ” ja kasutades „ näide ” operaator. See juhend on näidanud meetodit ClassCastExceptioni lahendamiseks Javas.