/ Forside / Teknologi / Udvikling / Java / Nyhedsindlæg
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
kæde af objekter
Fra : Hans Hvelplund Odbor~


Dato : 10-12-00 13:18

Jeg har en række objekter der referer til hinanden i en slags kæde.
Objekterne er af forskellige klasser, rækkefølgen kunne være
Core->Transmitter->Connection->Receiver->Core. Jeg står i den ene ende af
kæden og jeg gerne vil gern køre en metode i et af de andre objekter.
Problemet er at jeg jo kender det næste element og jeg tænkte derfor om
føgende ville virke:
(alle klasser har metoden getNext der returnere næste led i kæden)

Object next=transmitters[i]
while (next !instanceof Core)
{
next=next.getNext()
}
next.getLoad() //getLoad er en metode i Core

det jeg er mest i tvivl på er om jeg kan køre metoden på next da den jo er
et Object
jeg håber i forstår mit problem.



 
 
Kristian Kirk (10-12-2000)
Kommentar
Fra : Kristian Kirk


Dato : 10-12-00 15:04

Hvis du er sikker på, at next er instanceof Core, burde du kunne caste:
((Core) next).getLoad()
Men for at komme så langt, skal der vel stå
( ! (next instanceof Receiver))
i din while betingelse?

Mvh Kristian Kirk

Hans Hvelplund Odborg <hhod00@control.auc.dk> skrev i en
nyhedsmeddelelse:nwKY5.7256$72.99091@twister.sunsite.auc.dk...
> Jeg har en række objekter der referer til hinanden i en slags kæde.
> Objekterne er af forskellige klasser, rækkefølgen kunne være
> Core->Transmitter->Connection->Receiver->Core. Jeg står i den ene ende af
> kæden og jeg gerne vil gern køre en metode i et af de andre objekter.
> Problemet er at jeg jo kender det næste element og jeg tænkte derfor om
> føgende ville virke:
> (alle klasser har metoden getNext der returnere næste led i kæden)
>
> Object next=transmitters[i]
> while (next !instanceof Core)
> {
> next=next.getNext()
> }
> next.getLoad() file://getLoad er en metode i Core
>
> det jeg er mest i tvivl på er om jeg kan køre metoden på next da den jo er
> et Object
> jeg håber i forstår mit problem.
>
>



Kristian Kirk (10-12-2000)
Kommentar
Fra : Kristian Kirk


Dato : 10-12-00 15:15

Hov, glem hvad jeg skrev om while-betingelsen

Kristian Kirk <kirk@vision.auc.dk> skrev i en
nyhedsmeddelelse:x3MY5.7993$72.100138@twister.sunsite.auc.dk...
> Hvis du er sikker på, at next er instanceof Core, burde du kunne caste:
> ((Core) next).getLoad()
> Men for at komme så langt, skal der vel stå
> ( ! (next instanceof Receiver))
> i din while betingelse?
>
> Mvh Kristian Kirk
>
> Hans Hvelplund Odborg <hhod00@control.auc.dk> skrev i en
> nyhedsmeddelelse:nwKY5.7256$72.99091@twister.sunsite.auc.dk...
> > Jeg har en række objekter der referer til hinanden i en slags kæde.
> > Objekterne er af forskellige klasser, rækkefølgen kunne være
> > Core->Transmitter->Connection->Receiver->Core. Jeg står i den ene ende
af
> > kæden og jeg gerne vil gern køre en metode i et af de andre objekter.
> > Problemet er at jeg jo kender det næste element og jeg tænkte derfor om
> > føgende ville virke:
> > (alle klasser har metoden getNext der returnere næste led i kæden)
> >
> > Object next=transmitters[i]
> > while (next !instanceof Core)
> > {
> > next=next.getNext()
> > }
> > next.getLoad() file://getLoad er en metode i Core
> >
> > det jeg er mest i tvivl på er om jeg kan køre metoden på next da den jo
er
> > et Object
> > jeg håber i forstår mit problem.
> >
> >
>
>



Hans Hvelplund Odbor~ (10-12-2000)
Kommentar
Fra : Hans Hvelplund Odbor~


Dato : 10-12-00 15:20

> Hvis du er sikker på, at next er instanceof Core, burde du kunne caste:
> ((Core) next).getLoad()
nej det er jo det at første gang er det Transmitter anden gang Connection
næste gang Receiver og så til sidst Core.

men tilgengæld fik du mig gjort opmærksom på at jeg bare kan skrive:
(((transmitters[i].getNext()).getNext()).getNext()).getLoad();
Jeg var ikke lige klar over at man kunne det med paranteserne.
mange tak.



Hans Hvelplund Odbor~ (10-12-2000)
Kommentar
Fra : Hans Hvelplund Odbor~


Dato : 10-12-00 15:12

hmm nej det kan jeg ikke(og jeg ved godt at der skal stå :while (!(next
instanceof Core)), men er det eneste alternativ:

Transmitter trans=transmitters[0];
Connection conn=trans.getNext() //ja det kan gøres med
transmitters[0].getNext() i stedet
Receiver receiv=conn.getNext()
Core core=receiv.getNext()
core.getLoad()
?

det er da lidt omsonst.
Jeg kunne selvfølgelig have en reference i transmitter der referer til den
Core der er i den anden ende, men er det ikke lidt forkert rent æstetisk?
Hvad med at gøre referencen public? Så kan alle andre klasser jo læse
referencen direkte og jeg kan skrive
transmitters[0].next.next.next.getLoad().
Men dette er jo heller ikke så pænt æstetisk eller?

er der andre bedre måder at gøre det på?







Dennis Thrysøe (11-12-2000)
Kommentar
Fra : Dennis Thrysøe


Dato : 11-12-00 11:03

Jeg vil foreslå, at du enten nedarver disse objekter fra en fællers
superklasse, eller implementere et fælles interface på dem.

F.eks. kunne du implementere Node på dem og så i traverseringer betragte
alle objekterne som Nodes.

public interface Node {
Node getNext();
}

Hvis alle dine Nodes har en getLoad(), inkluderer du bare det i
interfacet også.

-dennis

Hans Hvelplund Odborg wrote:

> Jeg har en række objekter der referer til hinanden i en slags kæde.
> Objekterne er af forskellige klasser, rækkefølgen kunne være
> Core->Transmitter->Connection->Receiver->Core. Jeg står i den ene ende af
> kæden og jeg gerne vil gern køre en metode i et af de andre objekter.
> Problemet er at jeg jo kender det næste element og jeg tænkte derfor om
> føgende ville virke:
> (alle klasser har metoden getNext der returnere næste led i kæden)
>
> Object next=transmitters[i]
> while (next !instanceof Core)
> {
> next=next.getNext()
> }
> next.getLoad() //getLoad er en metode i Core
>
> det jeg er mest i tvivl på er om jeg kan køre metoden på next da den jo er
> et Object
> jeg håber i forstår mit problem.


Søg
Reklame
Statistik
Spørgsmål : 177501
Tips : 31968
Nyheder : 719565
Indlæg : 6408527
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste