» »

[Java]OOP Vprasanje glede dedovanja

[Java]OOP Vprasanje glede dedovanja

KernelPanic ::

Spostovani!

Imam naslednjo situacijo: V sistemu imam 10 entitet, ki jih moram prikazovati v Piccolo2d Canvasu (graficno - piccolo2d je opensource 2d graficna knjiznica za javo). Vsi razredi, ki ki predstavljajo te entitete, so dedovani iz razreda CAbstractEntity, v katerem so informacije, skupne vsem entitem (id, ime, ...). Vse to pobiram iz mysql baze. To dela vse ok, vendar imam sedaj problem. V piccolo canvas dodajam objekta tipa PNode, kar je logicno in to je ok. Vendar, kako bi naredil genericen class, ki deduje iz PNode (extends PNode), kjer v compile time ni vazno, katero entiteto predstavlja. Ali lahko castam iz CAbstractEntity v poljuben razred, izveden iz CAbstractEntity (polimorfizem ali kako se ze temu rece)? Kako naj to storim?

Primer, imam sledeco deklaracijo:
    private List<CAbstractEntity> m_oListEntities=new ArrayList<>();
    public List<CAbstractEntity> listEntites()
        { return this.m_oListEntities; }
    protected void setListEntites(final List<CAbstractEntity> le /* ListEntites */)
        { this.m_oListEntities=le; }
in nato v konstruktorju:
this.setListEntites(CDatabaseManager.getMultimediaEntities());
, ki mi mora nafilati podatke v array iz podbaze multimedia, vendar mi prevajalnik vrne napako:
error: method setListEntites in class CCanvas cannot be applied to given types;
this.setListEntites(CDatabaseManager.getMultimediaEntitiesArrayList());
Kako naj to resim?

Spura ::

KernelPanic je izjavil:

Ali lahko castam iz CAbstractEntity v poljuben razred, izveden iz CAbstractEntity (polimorfizem ali kako se ze temu rece)?

Da. Preostanek vprasanja mi ni razumljiv. Zakaj v casu sodobnih IDE uporabljas Hungarian Notation? Ime getterja naj bi bilo getListEntites in ne listEntities.

KernelPanic ::

Spura, hvala za odgovor, sem se malo poglobil, mislim, da bo sedaj delovalo, bom javil resitev, samo da stestiram! Glede notacije pa, sem pac old school in ta notacija mi je vsec, in getterje od jave locim od svojih tako, da se vsi getterji od same jave zacno z get, moji pa brez get, tako dobim na preglednosti, ker sem tako navajen ...

dmok ::

Ena varianta (pa ne vem če pride v poštev pri tebi) je tudi, da uporabiš generike, npr. nekaj takega:
public class PNodeSubclass<T extends CAbstractEntity> extends PNode {

	private List<T> m_oListEntities=new ArrayList<T>();
	
	public List<T> listEntites()
	    { return this.m_oListEntities; }
	
	protected void setListEntites(final List<T> le /* ListEntites */)
	    { this.m_oListEntities=le; }	
	
}


d.

KernelPanic ::

dmok, tocno to sem imel v mislih! Sem se ravno prej po prvem odgovoru tega lotil, samo da koncam in javim ...

KernelPanic ::

NO fantje, koda dela, nekaj me se zaj...., bom vprasal, ko pridem do tega! Drugace pa najlepsa hvala za pomoc!


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[Java] Sortiranje razredov

Oddelek: Programiranje
101461 (1208) Spura
»

Sortiranje po večih atributih, java

Oddelek: Programiranje
161693 (1459) marjan_h
»

[Android]Software Design vprasanje

Oddelek: Programiranje
91935 (1755) KernelPanic
»

Rekurzija v javi z ArrayList

Oddelek: Programiranje
81589 (1432) marjan_h
»

c# kako v prvi IEnumerable addati samo "Accaptable" tipe iz drugega IEnumerabla

Oddelek: Programiranje
51123 (1047) commissar

Več podobnih tem