22. november 2002 - 16:48Der 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...
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.
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 ?
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 ?
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
Det kan du godt, jeg tror det hedder avanceret pointgivning, men det er lidt sent nu.
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.