[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