Avatar billede kews Nybegynder
22. november 2002 - 16:48 Der er 13 kommentarer og
1 løsning

Identificer objekter ???

Hej,



Hvis jeg skal finde ud af hvilken type mit objekt er (transaktion, kunde, konto eller hvad det måtte være) og jeg bare sender det gennem mit program, som et alm. Objekt (Object o), hvordan kan jeg så finde ud af, hvilken type det er senere i mit program. Er det bedst med instanceOf(), fordi equals kan jo ikke bruges, da den sammenligner objekter. Hvad med det Class.forname ? Er det sådan det skal gøres ? Og hvordan er det smartest ? Objekttet bliver sendt gennem en redirection proxy, som så ikke kender det oprindelige objekt...
Avatar billede arne_v Ekspert
22. november 2002 - 16:58 #1
o.getClass().getName() vil give dig klassen.
Avatar billede carstenknudsen Nybegynder
22. november 2002 - 17:02 #2
Der er flere måder du kan gøre det på.
En måde er at bruge
    if (o instanceof transaction)
en anden måde er at benytte Class objektet der
er tilknyttet
    if (o.getClass().equals(MyClass.class) )
Sidstnævnte har den fordel at den ikke genkender
en type B som værende af type A selvom B nedarver fra A.
Alt afhængigt at hvad du har af typer/forventer af typer
er den ene måske at foretrække. Den sidste metode har
den fordel at rækkefølge af dine sammenligninger ikke
har nogen betydning. Den første metode kræver at du
først spørger om de mest specialiserede klasser,
dvs de nedarvede klasser før deres superklasser.
Men måske har det ingen betydning i din applikation.
Avatar billede kews Nybegynder
22. november 2002 - 17:31 #3
Tak for jeres svar. Det skal lige nævnes, at jeg skal have adgang til de metoder, ligger på den klasse, som bliver identificeret.
Meningen er, at jeg bare vil sende et objekt gennem min proxy - lige meget hvad det er. Når objektet kommer ned, hvor det skal redirectes, skal det forskellige steder hen. Så hertil kan jeg godt bruge jeres metoder, men så er mit spørgsmål...har jeg også adgang til metoderne på objektet, når det først er identificeret ?
Avatar billede kews Nybegynder
22. november 2002 - 17:32 #4
PS. getName() returnerer vel bare en streng ?
Avatar billede carstenknudsen Nybegynder
22. november 2002 - 18:15 #5
ja getName returneres bare en String.
når du har et class objekt kan du lave reflection
og kalde metoder på objektet.
Avatar billede kews Nybegynder
22. november 2002 - 18:25 #6
Teach me...
Avatar billede kews Nybegynder
22. november 2002 - 18:26 #7
dvs. når jeg kalder getClass() får jeg et objekt af klassen tilbage, men det indeholder vel ikke de medsendte attributter, som jeg oprettede objektet med ?
Avatar billede kews Nybegynder
22. november 2002 - 18:27 #8
Oder was ?
Avatar billede carstenknudsen Nybegynder
22. november 2002 - 18:42 #9
Med getClass får du et objekt af typen Class.
Fra dette objekt kan du få alle metoderne ud.
Object o = ...; // har du modtaget
Class c = o.getClass();
Methods m = c.getMethod("nameOfMethod",new Class[] {}); // får fat i
metoden der hedder nameOfMethod der ikke har nogen argumenter
m.invoke(new Object[] {}); // her kalder du metoden
m=c.getMethod("anotherMethod",new Class[] {String.class}); // får fat
i en metode der hedder anotherMethod der tager en String som argument
m.invoke(new Object[] {"stringArgument"}); // her kaldes metoden
Avatar billede carstenknudsen Nybegynder
22. november 2002 - 18:43 #10
PS Methods m skulle være Method m.
Avatar billede arne_v Ekspert
22. november 2002 - 18:43 #11
Hvis du har et objekt o af klassen med navnet
"MinKlasse" som har en metode:
  public void doit(String s)
som du vil kalde med en String ss, så kan du:

Class declarg[] = new Class[1];
declarg[0] = String.class;
Object callarg[] = new Object[1];
callarg[0] = ss;
Class.forName("MinKlasse").getMethod("doit", declarg).invoke(o, callarg);
Avatar billede kews Nybegynder
22. november 2002 - 19:20 #12
Tak for de gode svar...men jeg kan desværre ikke give jer begge point...dårligt....
Avatar billede kews Nybegynder
22. november 2002 - 19:21 #13
Hvad finder vi ud af carstenknudsen ?
Avatar billede carstenknudsen Nybegynder
22. november 2002 - 19:48 #14
Det kan du godt, jeg tror det hedder avanceret pointgivning,
men det er lidt sent nu.
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