[Java lista] egyszerű kérdés :)

Varjasi Norbert varjasin at sze.hu
2009. Aug. 16., V, 21:31:42 CEST


Szia!
Ezt szerintem nem érdemes túlbonyolítani, az öröklést és a
polimorfizmust pont erre találták ki! Tehát készíts egy absztrakt
ősosztályt amelyben benne van az összes közös példányváltozó és a közös
metódusok, illetve absztrakt metódusként azok, amelyek a
leszármazottakban lesznek kifejtve. Ezután készítsd fel a listát a
hierarchia példányainak fogadására pl: List<Ososztaly>
Az A, B és C osztályok pedig legyenek az ős leszármazottjai és fejtsd ki
a metódusokat.
A többit majd a JVM és a runtime binding elvégzi, hiszen az egészet erre
találták ki. (A generikus listával megúszod a castolásokat is.)
Persze, ha nem megoldható az öröklés, akkor az egészet interfészekkel
is, az elv hasonló.

Ha ezt kézzel programozod, akkor nem lehet az egész szerkezet több 40-50
sornál (algoritmusok nélkül). Ha ezt valami generálja, akkor az a
"valami" nincs igazán objektumorientált szemléletben szerkesztve és
máshol is lehetnek benne gázos dolgok.
Ennek a while-nak annyiból illene állnia, hogy:
public void feldolgoz(List<Ososztaly> lista){
  Iterator iterator = lista.iterator();
  while(iterator.hasNext()){
      iterator.next().metodus1();
  }
}
Vagy így is lehet, ez még egyszerűbb:
public void feldolgoz(List<Ososztaly> lista){
  for(Ososztaly elem : lista) {
    elem.metodus1();
  }
}

üdv: VN,


Huj Tamás írta:
> sziasztok!
> 
> van 3 osztályom:
> osztA
> osztB
> osztC
> 
> az osztályok majdnem teljesen ugyanolyanok csak üzleti szempontok
> miatt kellett különválasztani őket, de a tagváltozóik és a metódusaik
> nagy része megegyezik.
> 
> és van egy Collectionom a példa kedvéért legyen egy lista.
> 
> van egy metódusom ami ilyen típusú listákat dolgoz fel, és csak olyan
> metódusokat hív ami mind a 3 osztályban megvan, és most a feldolgozó
> függvénynél gyakorlatilag meg kell háromszorozni a kódot mert a
> megfelelő osztályra kell castolni. Valahogy így:
> 
>     public void feldolgoz(List lista){
> 
>         Iterator iterator = lista.iterator();
> 
>         while(iterator.hasNext()){
>             Object o = iterator.next();
> 
>             if(o instanceof osztA){
>              ((osztA)o).metodus1()
>             } else if(o instanceof osztB){
>              ((osztB)o).metodus1()
>             } else if(o instanceof osztC){
>              ((osztC)o).metodus1()
>             }
>         }
> 
>     }
> 
> Ha egy közös itnerfészt implementálnának az osztályok akkor nem
> kellene a kódot megháromszorozni, és az jó lenne. De az a baj, hogy
> ezeket az osztályokat egy keretrendszer generálja egy ant-os buildelés
> során, és nem szabad belenyúlni a kódba, mert mindig úgyis
> újragenerálódik.
> 
> Vajon meg lehetne oldani interfész nélkül ezt a problémát úgy hogy ne
> kellejen egy csomó helyen megháromszorozni a kódot?
> 
> üdv,
> Tomi
> _______________________________________________
> Javalist mailing list
> Javalist at javagrund.hu
> http://javagrund.hu/mailman/listinfo/javalist



További információk a(z) Javalist levelezőlistáról