Med peterfups svar skal du specifikt kende både package og klassenavn. Derimod er du sikker på at der er lige præcis _den_ klasse, du arbejder med (og ikke en klasse, som er længere oppe i klassehierakiet (forklaring ved instanceof)
Her er f.eks. et eksempel udfra dit spørgsmål... ---------- if( obj.getClass().getName().equals("java.lang.String") ) {... bla bla bla ...} else if( obj.getClass().getName().equals("MyClass") ) {... tja tja tja ...} ----------
I sorenos eksempel tester du med en specifik java-operator, som hedder instanceof. Den er nemmere at bruge, da man ikke skal kende det fulde kvalificerede navn på klassen (package+klassenavn). Dog skal man huske på at, hvergang en klasse nedarver fra en anden klasse (extends), så bliver objektet af denne subklasse også betragtet som en instans af klassens superklasser.
Dette vil f.eks. betyde at i et eksempel hvor vi har et String objekt "str" vil følgende udsagn også være sandt (str instanceof Object)
Derfor, hvis du ikke har mange nedarvede klasser, så brug instanceof - den er meget nemmere (og hurtigere) at bruge...
Hvis du dog vil være 1000% sikker på at det er en instans af en helt specifik klasse, så brug getClass().getName().equals("..."); .. Bare læg mærke til at læsebarheden bliver væsenligt foringet af at bruge getClass().getName().equals("...")-metoden
Disky >> bare nysgerrig, men du siger at det kan gøres endnu smartere ved reflection.. er peterfups eksempel ikke et eksempel på reflection (eller...?)... Og i så fald ikke, hvordan skulle det så laves med reflection...
Og skal instanceof bladre alle klasser i classpath igennem for at teste om et specifik objekt er instans af et andet objekt. Jeg troede at enhver instans i JVMen havde information omkring, hvilken klasse, instansen er, samt at der hurtigt kunne refereres, hvikle superklasser, der er for den ønskede instanceof klassenavn.... ( 'b' i "obj instanceof b")
bearhugx--> Ja, hvis klassen Test ligger i package fup, så returnerer getClass().getName() strengen "fup.Test"
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.