/ Forside/ Teknologi / Udvikling / Java / Spørgsmål
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java
#NavnPoint
molokyle 3688
Klaudi 855
strarup 740
Forvirret 660
gøgeungen 500
Teil 373
Stouenberg 360
vnc 360
pmbruun 341
10  mccracken 320
Hvad class blev jeg kaldt med?
Fra : engo
Vist : 1104 gange
200 point
Dato : 05-02-01 12:02

Jeg har 3 forskellige klasse som er nedarvet fra den samme klasse, nu vil jeg godt lave en fælles funktion for disse klasser, men inde i funktionen skal den checke hvad for en af klasserne den blev kaldt med. Kan det lade sig gøre?

f.eks således, det ville være smart :

function minfunc(testclass a)
{
if (a.type == minklasse1)
...
else if (a.type == minklasse2)
...
else if (a.type == minklasse3)
...
}

>>Engo

 
 
Accepteret svar
Fra : vnc

Modtaget 210 point
Dato : 05-02-01 13:33

Hej Engo,

Du skal bare skrive

if (a instanceof minklasse1)
...
else if (a instanceof minklasse2)
...
else if (a instanceof minklasse3)
...

VNC

Godkendelse af svar
Fra : engo


Dato : 05-02-01 15:33

Tak for svaret vnc.
                        

Kommentar
Fra : Nyhedsbruger


Dato : 05-02-01 12:27

EnKlasse a = new EnKlasse();


if(a.Class instanceoff [pakkenavn].EnKlasse){

}


mvh
Simon
"engo" <engo.news@kandu.dk> wrote in message
news:RKvf6.15603$zw.280987@twister.sunsite.dk...
> Jeg har 3 forskellige klasse som er nedarvet fra den samme klasse, nu vil
jeg godt lave en fælles funktion for disse klasser, men inde i funktionen
skal den checke hvad for en af klasserne den blev kaldt med. Kan det lade
sig gøre?
>
> f.eks således, det ville være smart :
>
> function minfunc(testclass a)
> {
> if (a.type == minklasse1)
> ...
> else if (a.type == minklasse2)
> ...
> else if (a.type == minklasse3)
> ...
> }
>
> >>Engo
>
>
> Leveret af:
> http://www.kandu.dk/
> "Vejen til en hurtig løsning"
>



Kommentar
Fra : Nyhedsbruger


Dato : 05-02-01 12:37

engo wrote:
>
> Jeg har 3 forskellige klasse som er nedarvet fra den samme klasse, nu vil jeg godt lave en fælles funktion for disse klasser, men inde i funktionen skal den checke hvad for en af klasserne den blev kaldt med. Kan det lade sig gøre?

Kan du ikke bare lave en funktion "int hvemErJeg()"

base-klassen kan returnere 0
de andre klasser kan fx. returnere 1, 2 eller 3

mvh. Morten N

Kommentar
Fra : Nyhedsbruger


Dato : 05-02-01 12:57


Brug funktionen instanceOf(klasse navn)

--
With many Thanks
Soren ' Disky ' Reinke ICQ #1413069 remove 'ihsyd' when email replying
Please visit my Freshwater Aquaria Webpage
http://www.disky-design.dk/fish

"engo" <engo.news@kandu.dk> wrote in message
news:RKvf6.15603$zw.280987@twister.sunsite.dk...
> Jeg har 3 forskellige klasse som er nedarvet fra den samme klasse, nu vil
jeg godt lave en fælles funktion for disse klasser, men inde i funktionen
skal den checke hvad for en af klasserne den blev kaldt med. Kan det lade
sig gøre?
>
> f.eks således, det ville være smart :
>
> function minfunc(testclass a)
> {
> if (a.type == minklasse1)
> ...
> else if (a.type == minklasse2)
> ...
> else if (a.type == minklasse3)
> ...
> }
>
> >>Engo
>
>
> Leveret af:
> http://www.kandu.dk/
> "Vejen til en hurtig løsning"
>



Kommentar
Fra : Nyhedsbruger


Dato : 05-02-01 13:02

On Mon, 05 Feb 2001 12:36:38 +0100, Morten Nedertoft
<mmn@pr-group.sdu.dk> wrote:

>engo wrote:
>>
>> Jeg har 3 forskellige klasse som er nedarvet fra den samme klasse, nu vil jeg godt lave en fælles funktion for disse klasser, men inde i funktionen skal den checke hvad for en af klasserne den blev kaldt med. Kan det lade sig gøre?
>
>Kan du ikke bare lave en funktion "int hvemErJeg()"
>
>base-klassen kan returnere 0
>de andre klasser kan fx. returnere 1, 2 eller 3

Tåbeligt, når der nu er en instanceof operator.

Derudover er der en metode 'getClass()' i Object som man kan kalde og
får reference til en beskrivelse af klassen for objektet, som man så
igen kan få navnet fra.

Bortset fra de detaljer, så tyder spørgsmålet på at det er et design
problem eet eller andet sted, da 'engo' vil lave en funktion der
hedder det samme for alle klasserne, men opfører sig anderledes.

'Engo': Du burde, som Morten N foreslår, lave en fælles 'abstract'
metode i din base class, som du så overstyrer i dine subclasses.

Dog skal de ikke returnere 1,2,3 alt efter klasse typen, men faktisk
udføre den funktionalitet du ville samle i din base class.

Ihvertfald lyder det til at du burde læse lidt op på dine OO
principper, idet det du er ved at designe ikke lyder helt fornuftigt.


>mvh. Morten N

vh. ld
--
"Time is the fire in which we burn"

Kommentar
Fra : Nyhedsbruger


Dato : 05-02-01 17:36

> function minfunc(testclass a)

øh.. er det ikke JavaScript?
Kig evt. her for info om objektorientering i JavaScript:

http://www.mindspring.com/~bobclary/docs/oop-javascript.html

JavaScript hører vistnok til i denne nyhedsgruppe: dk.edb.internet.webdesign

Ulrik Magnusson

--
"If you don't succeed, redefine success"
Anonymous
Visit my home page: http://www.geocities.com/ulrikm



Kommentar
Fra : Nyhedsbruger


Dato : 12-02-01 11:24

Lars Dam wrote:

> >Kan du ikke bare lave en funktion "int hvemErJeg()"
> >
> >base-klassen kan returnere 0
> >de andre klasser kan fx. returnere 1, 2 eller 3
>
> Tåbeligt, når der nu er en instanceof operator.

Ikke nødvendigvis.

Hvor meget tid tager et typecheck versus et opslag i en int?

--
Thorbjørn Ravn Andersen "...sound of...Tubular Bells!"
http://bigfoot.com/~thunderbear

Kommentar
Fra : Nyhedsbruger


Dato : 12-02-01 11:47

On Mon, 12 Feb 2001 11:24:01 +0100, Thorbjørn Ravn Andersen
<thunderbear@bigfoot.com> wrote:

>Lars Dam wrote:
>> >Kan du ikke bare lave en funktion "int hvemErJeg()"
>> >base-klassen kan returnere 0
>> >de andre klasser kan fx. returnere 1, 2 eller 3
>> Tåbeligt, når der nu er en instanceof operator.
>Ikke nødvendigvis.
>Hvor meget tid tager et typecheck versus et opslag i en int?

Aner det ikke, og er også ligeglad med hvor lang tid det tager.

Hvad jeg derimod ikke er ligeglad med, er om man kan slippe for at
implementere noget som allerede eksisterer på en smartere måde, _som_
man så senere også skal vedligeholde.

vh. ld
--
"Time is the fire in which we burn"

Kommentar
Fra : Nyhedsbruger


Dato : 12-02-01 12:05

Lars Dam wrote:

> Derudover er der en metode 'getClass()' i Object som man kan kalde og
> får reference til en beskrivelse af klassen for objektet, som man så
> igen kan få navnet fra.

Apropos objekt.getClass(), saa har jeg set i en test, at den tager lang
tid at udfoere. Er der en der kan give mig en god grund til dette?
Desuden vil jeg meget gerne have omformuleret nedenstaaende
dokumentation til getClass() - jeg forstaar ikke meningen.

Returns the runtime class of an object. That Class object is the object
that is locked by static synchronized methods of the represented class.

mvh. Morten N

Kommentar
Fra : Nyhedsbruger


Dato : 12-02-01 13:27

> Apropos objekt.getClass(), saa har jeg set i en test, at den tager lang
> tid at udfoere. Er der en der kan give mig en god grund til dette?
> Desuden vil jeg meget gerne have omformuleret nedenstaaende
> dokumentation til getClass() - jeg forstaar ikke meningen.
>
> Returns the runtime class of an object. That Class object is the object
> that is locked by static synchronized methods of the represented class.

Ja, det lyder også lidt sort, men jeg tror at meningen med det er at hvis
du laver en
almindelig synchronized metode, låser du det enkelte objekt. Hvis du laver
en static
synchronized "metode", låser du jo også noget - klassen selv - og det er et
objekt, nemlig
det objekt som getClass() returnerer.

Altså alt, der kan låses må være et objekt, og derfor må static
synchronized jo
også låse et objekt - klasseobjektet.

Ok, min forklaring er måske lige så sort (og måske ikke korrekt?), men i
det ser
ud som om at teksten bare prøver at forklare hvad getClass() returnerer ud
fra
hvad der ligger bag et tilfælde af klasseobjektets brug.

Ulrik Magnusson


--
"Look! Ducks in the lake"
'Agent Cooper' in Twin Peaks - Lynch, 1990
Visit my home page: http://www.geocities.com/ulrikm



Kommentar
Fra : Nyhedsbruger


Dato : 12-02-01 13:31

> Hvad jeg derimod ikke er ligeglad med, er om man kan slippe for at
> implementere noget som allerede eksisterer på en smartere måde, _som_
> man så senere også skal vedligeholde.

Det vil jeg også have en tilbøjelighed til at mene, og derfor piner det
mig at konstatere
at jeg faktisk har lavet klasseid'er - med stor succes mht programmets
hastighed. Det
er da noget svineri, men "desparate times calls for desperate measures"..

Hvad gør man i øvrigt i C++ - der har man da ikke en instanceof operator?

Ulrik Magnusson

--
"Look! Ducks in the lake"
'Agent Cooper' in Twin Peaks - Lynch, 1990
Visit my home page: http://www.geocities.com/ulrikm



Kommentar
Fra : Nyhedsbruger


Dato : 12-02-01 14:01

Ulrik Magnusson wrote:
>
> > Apropos objekt.getClass(), saa har jeg set i en test, at den tager lang
> > tid at udfoere. Er der en der kan give mig en god grund til dette?
> > Desuden vil jeg meget gerne have omformuleret nedenstaaende
> > dokumentation til getClass() - jeg forstaar ikke meningen.
> >
> > Returns the runtime class of an object. That Class object is the object
> > that is locked by static synchronized methods of the represented class.
>
> Ja, det lyder også lidt sort, men jeg tror at meningen med det er at hvis
> du laver en
> almindelig synchronized metode, låser du det enkelte objekt. Hvis du laver
> en static
> synchronized "metode", låser du jo også noget - klassen selv - og det er et
> objekt, nemlig
> det objekt som getClass() returnerer.
>
> Altså alt, der kan låses må være et objekt, og derfor må static
> synchronized jo
> også låse et objekt - klasseobjektet.
>
> Ok, min forklaring er måske lige så sort (og måske ikke korrekt?), men i
> det ser
> ud som om at teksten bare prøver at forklare hvad getClass() returnerer ud
> fra
> hvad der ligger bag et tilfælde af klasseobjektets brug.

Jeg tror, at du har tolket det rigtigt. Det lyder fornuftigt.

mvh. Morten N

Kommentar
Fra : Nyhedsbruger


Dato : 12-02-01 14:12

On Mon, 12 Feb 2001 12:30:33 GMT, Ulrik Magnusson <ulrikm@yahoo.com>
wrote:

>> Hvad jeg derimod ikke er ligeglad med, er om man kan slippe for at
>> implementere noget som allerede eksisterer på en smartere måde, _som_
>> man så senere også skal vedligeholde.
>
>Det vil jeg også have en tilbøjelighed til at mene, og derfor piner det
>mig at konstatere
>at jeg faktisk har lavet klasseid'er - med stor succes mht programmets
>hastighed. Det
>er da noget svineri, men "desparate times calls for desperate measures"..

Det er iorden at lave det, hvis det er nødvendigt. Men ikke før man
konstaterer at det er nødvendigt.

>Hvad gør man i øvrigt i C++ - der har man da ikke en instanceof operator?

No idea - det er et stykke tid siden jeg har rodet med C++ så dybt
Det kunne være man skulle spørge Igor i dk.edb.programmering.c hvis
man vil have svar på det spørgsmål

>Ulrik Magnusson

vh. ld
--
"Time is the fire in which we burn"

Kommentar
Fra : Nyhedsbruger


Dato : 12-02-01 15:19

Lars Dam wrote:
>
> On Mon, 12 Feb 2001 11:24:01 +0100, Thorbjørn Ravn Andersen
> <thunderbear@bigfoot.com> wrote:
>
> >Lars Dam wrote:
> >> >Kan du ikke bare lave en funktion "int hvemErJeg()"
> >> >base-klassen kan returnere 0
> >> >de andre klasser kan fx. returnere 1, 2 eller 3
> >> Tåbeligt, når der nu er en instanceof operator.
> >Ikke nødvendigvis.
> >Hvor meget tid tager et typecheck versus et opslag i en int?
>
> Aner det ikke, og er også ligeglad med hvor lang tid det tager.
>
> Hvad jeg derimod ikke er ligeglad med, er om man kan slippe for at
> implementere noget som allerede eksisterer på en smartere måde, _som_
> man så senere også skal vedligeholde.

Personligt ville jeg i så fald kikke på Interfaces og ikke nedarv.

--
Thorbjørn Ravn Andersen "...sound of...Tubular Bells!"
http://bigfoot.com/~thunderbear

Kommentar
Fra : Nyhedsbruger


Dato : 12-02-01 16:30

> >Hvad gør man i øvrigt i C++ - der har man da ikke en instanceof operator?
>
> No idea - det er et stykke tid siden jeg har rodet med C++ så dybt
> Det kunne være man skulle spørge Igor i dk.edb.programmering.c hvis
> man vil have svar på det spørgsmål

Det tør jeg ikke . Jeg kunne jo også lige kigge i min "C++ for Java
Programmers" og
læse at man bruger "dynamic_cast" operatoren, som er en kombination af
"instanceof" og
det egentlige cast - der bliver returneret null, hvis konverteringen ikke
lykkes..

Ulrik Magnusson


--
DEUTSCH: You two have some sick sex thing?
BARTON: Sex?! He's a MAN! We WRESTLED!
Barton Fink - Joel and Ethan Coen, 1991
Visit my home page: http://www.geocities.com/ulrikm



Du har følgende muligheder
Eftersom du ikke er logget ind i systemet, kan du ikke skrive et indlæg til dette spørgsmål.

Hvis du ikke allerede er registreret, kan du gratis blive medlem, ved at trykke på "Bliv medlem" ude i menuen.
Søg
Reklame
Statistik
Spørgsmål : 177414
Tips : 31962
Nyheder : 719565
Indlæg : 6407849
Brugere : 218876

Månedens bedste
Årets bedste
Sidste års bedste