Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Iteraattori Javassa

Snifferi [31.03.2005 10:45:41]

#

Hoi, taas on probleema kohdannut ihmislasta.

Oletetaan, että on yliluokka A. Sen perii luokat B ja C. Luokat järjestyvät Composite-suunnittelumallin mukaisesti:

C-luokka on se Composite-luokka, joka siis Composite-suunnittelumallin mukaisesti perii luokan A. C-luokka koostuu myös yliluokan tyyppisistä olioista - eli luokka C toimii säiliönä yliluokan tyyppisille olioille. Koska yliluokka on abstrakti, käytännössä luokka C koostuu siis B- ja C-luokan ilmentymistä (itsensätyyppisistä).

Varmaankin tiesitte ko. suunnittelumallin salat, kunhan selvensin :).

Jos mulla on luokassa C seuraava tietorakenne ja sille käsittelymetodi:

private HashMap jotakin = new HashMap();

public void lisaaOtus(Integer id, A a) {
      jotakin.put(id, a);
    }

Eli lisätään HashMappiin olioita yliluokan tyyppisinä - vaikka ne siis ovat kuitenkin B- tai C-luokan ilmentymiä.

Tässä ei ole mitään ongelmaa (ilmeisesti).
Kun nyt tuohon HashMappiin lisätään tarpeeksi paljon (mielivaltainen määrä) olioita, hierarkiasta voi tulla vaikka kuinka syvä.

.
.
.

// id-muuttujassa aina eri arvo

c.lisaaOtus(new Integer(id), b);
c.lisaaOtus(new Integer(id), c1);
c1.lisaaotus(new Integer(id), b1);
.
.
.

Miten siis saisin käytyä läpi tuon koko hierarkian ylhäältä alas? Yliluokan tyyppisenä luonnollisesti. Ilmeisesti iteraattori olisi paikallaan... Mutta miten se pitäisi tehdä?

Jos vaikka noissa B- ja C-luokassa on omat tulosta()-metodit ja niitä sitten kutsuttaisiin aina, kun HashMappia iteroidaan. Metodi palauttaisi halutulla tunnuksella löytyneen olion viitteen, joten siihen pääsisi sitten käsiksi luokan ulkopuolella.

Avusta ollaan kiitollisia...

Snifferi [01.04.2005 08:22:37]

#

Eipä enää mittään.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta