|
| 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 |
| | |
|
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"
>
| |
|
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
| |
|
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"
>
| |
|
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"
| |
|
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
| |
|
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"
| |
|
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
| |
|
> 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
| |
|
> 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
| |
|
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
| |
|
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"
| |
|
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
| |
|
> >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.
| |
|
|