Kā atrisināt ClassCastException problēmu Java?

Ka Atrisinat Classcastexception Problemu Java



Java valodā “ ClassCastException ” palīdz noteikt tipu saderības problēmas izpildlaikā, ļaujot izstrādātājiem tās atklāt agrīnā izstrādes fāzē. Tas arī nodrošina tipa drošību, novēršot neatbilstības programmā. ClassCastException ļoti palīdz atkļūdošanas, testēšanas, pareiza tipa apraides u.c. procesā.

Šajā rokasgrāmatā ir parādīta procedūra ClassCastException atrisināšanai Java.







Kā ClassCastException rodas Java?

' ClassCastException ” nodrošina pareizu tipa apraidi un novērš izpildlaika kļūdas, ko izraisa nesaderīgu tipu konvertēšana. Vienkārši izsakoties, šis izņēmums tiek izmests, ja objektu mēģina nodot nesaderīgam tipam.



Piemēram, apmeklējiet tālāk norādīto kodu par “ ClassCastException ” Java valodā:



imports java.io.* ;
imports java.lang.* ;
imports java.util.* ;

klasē LinuxHint {
//Autovadītāju klases izveide
publiski statisks nederīgs galvenais ( Stīga [ ] args )
{
mēģināt {
Objekts vecāks = jauns Objekts ( ) ;

Stīga bērns = ( Stīga ) vecāks ;
Sistēma . ārā . println ( bērns ) ;
}
noķert ( Izņēmums f ) {
Sistēma . ārā . println ( f ) ;
}
}
}

Iepriekš minētā koda skaidrojums:





  • Iekš ' mēģināt 'bloks, objekta gadījums' vecāks ” tiek deklarēts, izmantojot “ jauns ” atslēgvārds.
  • Pēc tam tiek izmantota mašīnrakstīšana, kurā “ objektu ' tips tiek pārraidīts, un tam ir nosaukums ' bērns ”.
  • Šī tipa apraide pārkāpj noteikumu, ka vecākklasi nedrīkst pārsūtīt uz tās atvasināto klasi. Tāpēc izņēmums rodas, jo ' objektu ” veids ir vecāku klase.
  • Galu galā ' noķert 'Tiek izmantots bloks, kas aizņem ' Izņēmums ” kā parametru un izdrukā ziņojumu konsolē.

Pēc izpildes posma beigām:



Iepriekš redzamais momentuzņēmums parāda ClassCastException sastopamību Java.

Kā atrisināt ClassCastException problēmu Java?

Tiek izmantoti trīs iespējamie risinājumi, kurus izstrādātājs var viegli atrisināt vai izvairīties no iespējas paaugstināt “ ClassCastException ” Java valodā.

Šie risinājumi ir aprakstīti tālāk atsevišķi:

1. risinājums. Operatora “instanceof” izmantošana

' instanceof ' operators pārbauda, ​​vai ' objektu ” ir vai nav vēlamā veida gadījums. Šī pārbaude palīdz novērst ' ClassCastException ”. Piemēram, apmeklējiet tālāk norādīto koda bloku:

publiski klasē TypeCheckingLinuxHint {
publiski statisks nederīgs galvenais ( Stīga [ ] args ) {

Objekts vecāks = 'LinuxHint ģimene' ;
ja ( vecāks instanceof Stīga ) {
Stīga bērns = ( Stīga ) vecāks ;
Sistēma . ārā . println ( 'Pēc ierakstīšanas virknes:' + bērns ) ;
} cits {
Sistēma . ārā . println ( 'Objekts ir vajadzīgā tipa String gadījums.' ) ;
}
}
}

Iepriekš minētā koda skaidrojums:

  • Pirmkārt, ' vecāks Tiek izveidots objekts, kas tiek inicializēts ar fiktīvu vērtību ' mēģināt ' bloķēt.
  • Pēc tam izmantojiet 'ja' paziņojums, kurā ' instanceof operators tiek izmantots, lai pārbaudītu vecāks 'objekts ar vēlamo' Stīga ” veids.
  • Tālāk, ja nosacījums atgriežas “ taisnība ” tiek veikta tipa apraide un parādīta konsolē.
  • Pretējā gadījumā konsolē tiek parādīts pielāgotais kļūdas ziņojums.

Pēc izpildes posma beigām:

Momentuzņēmums parāda, ka tipveida apraide ir veiksmīgi pabeigta un ClassCastException ir atrisināta, izmantojot “ instanceof ” operators.

2. risinājums: pārskatiet un veiciet pareizu rakstīšanas darbību

Vēl viens risinājums ir pārbaudīt kodu vairākas reizes un pārskatīt saderīgos tipu apraides veidus. Piemēram, apmeklējiet tālāk norādīto kodu, kurā “ ClassCastException ” tiek arestēts, jo nav saderīgs vēlamais veids, kas paredzēts drukāšanai:

publiski klasē TypeCheckLinuxHint {
publiski statisks nederīgs galvenais ( Stīga [ ] args ) {
Objekts vecāks = 'LinuxHint ģimene' ;
Vesels skaitlis convertedNumber = ( Vesels skaitlis ) vecāks ;
Sistēma . ārā . println ( 'Numurs pēc ierakstīšanas:' + convertedNumber ) ;
}
}

Iepriekš minētajā kodā programmētājs nepareizi izlaida ' Stīga 'uz' Vesels skaitlis ”.

Pēc apkopošanas posma beigām:

Iepriekš redzamais momentuzņēmums parāda ClassCastException rašanos.

3. risinājums: ģenērisko līdzekļu izmantošana

Programmētāji var izmantot ģenēriskās zāles ” lai norādītu paredzamos tipus un ieviestu tipu drošību kompilācijas laikā.

Piemēram, apmeklējiet tālāk norādīto kodu:

imports java.util.ArrayList ;
imports java.util.List ;

publiski klasē izmantojot Generics {
publiski statisks nederīgs galvenais ( Stīga [ ] args ) {
Saraksts < Stīga > empName = jauns ArrayList <> ( ) ;
empName. pievienot ( 'Harijs' ) ;
empName. pievienot ( 'Poters' ) ;

Stīga Sākotnējais = empName. gūt ( 0 ) ;
Stīga Fināls = empName. gūt ( 1 ) ;

Sistēma . ārā . println ( 'Vārds: ' + Sākotnējais ) ;
Sistēma . ārā . println ( 'Otrais vārds: ' + Fināls ) ;
}
}

Iepriekš minētā koda skaidrojums:

  • Pirmkārt, nepieciešamās utilītas tiek importētas Java failā un klase “ izmantojot Generics ” tiek deklarēts.
  • Tālāk “ ArrayList ' tipa ' Stīga ' ir deklarēts ar nosaukumu ' empName ” un inicializēts, nodrošinot divus fiktīvus datu elementus.
  • Pēc tam izveidojiet divus virknes tipa mainīgos ar nosaukumu ' Sākotnējais ' un ' Fināls ”. Pēc tam piešķiriet vērtības, piekļūstot indeksa numuriem.
  • Beigās parādiet abus mainīgos, lai redzētu rezultātu.

Pēc izpildes beigām izvade izskatās šādi:

Iepriekš redzamais momentuzņēmums ilustrē, ka tipa apraide ir veikta, izmantojot sugas.

Secinājums

Lai atrisinātu ' ClassCastException ” Java, programmētājam ir jānodrošina pareiza tipa saderība, izmantojot “ ģenēriskās zāles ” un „ instanceof ” operators. Lai atrisinātu izņēmumu, programmētājam ir jāpārskata un jālabo liešanas darbība, nodrošinot pareizu tipu saderību. Turklāt šis ' ClassCastException ' var izvairīties, izmantojot ' ģenēriskās zāles ” un izmantojot „ instanceof ” operators. Šajā rokasgrāmatā ir parādīta metode, kā atrisināt Java ClassCastException.