Avatar billede halfblind Nybegynder
21. maj 2002 - 21:21 Der er 8 kommentarer og
1 løsning

finde ud af Object's type

Hvordan kan jeg tjekke om et Object er f.eks. af typen String eller MyClass?
Avatar billede peterfup Nybegynder
21. maj 2002 - 21:24 #1
jeg mener man kan sige get.Class().getName() og så returneres der en String med Navnet på objektet!
Avatar billede soreno Praktikant
21. maj 2002 - 21:27 #2
if(mitObj instanceof String)
  System.out.println("Det var en String");
else if(mitObj instanceof MyClass)
  System.out.println("Det var en MyClass");
Avatar billede disky Nybegynder
21. maj 2002 - 22:06 #3
Soreno:
Ikke særlig praktisk måde at gøre det på, hvis klassens type er helt ukendt, der er en hel del java klasser at scanne igennem.

Peter's metode er klart den smarteste, eller endnu bedre reflection.
Avatar billede disky Nybegynder
21. maj 2002 - 22:06 #4
når vi snakker generelle løsninger,
Avatar billede bearhugx Nybegynder
21. maj 2002 - 22:14 #5
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

/Søren
Avatar billede halfblind Nybegynder
21. maj 2002 - 22:17 #6
sorry, glemte at opdatere og så ikke at der var kommer flere svar....
Avatar billede bearhugx Nybegynder
21. maj 2002 - 22:30 #7
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")

/Søren
Avatar billede disky Nybegynder
21. maj 2002 - 22:45 #8
rigtig reflection er det ikke.

men reflection bruges normalt til at se hvilke metoder der er i ukendte klasser osv.
Avatar billede peterfup Nybegynder
22. maj 2002 - 00:39 #9
bearhugx--> Ja, hvis klassen Test ligger i package fup, så returnerer getClass().getName() strengen "fup.Test"
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester