[Javalist] Generics kerdes
János Háber
janos.haber at javaportal.hu
2012. Május. 9., Sze, 11:12:05 CEST
bar a kod kicsit kusza, mivel gondolom valami html szuro kivette a <>
kozti reszt. De logikus hogy nem fog menni.
D tipust varsz vissza ami kiterjeszti DAOB<P>,t theat abbolszarmazik,
viszont pelda nyosiraskor "csak" DAOB<P>-t csinalsz (ami "kevesebb"
mint D)
Tehat minden D -> DAOB<P> de nem minden DAOB<P> D
:DDD
Ezert nem tudsz DAOB<P>-t returnolni ott ahol D-t varsz.
On Wed, May 9, 2012 at 10:56 AM, zamek <zamek at vili.pmmf.hu> wrote:
> hello,
>
> Kicsit beletekeredtem a generics-be :(
>
> Csinaltam egy kivonatot, hogy egyben latsszon a problema.
>
> Van egy POJO hierarchia, amit egy Dao hierarchia tud feldolgozni. Ehhez
> szeretnek egy factory hierarchiat is csinalni. Minden ok, kiveve a
> DAOBFactory-t, aminel a fordito hibat dob.
>
> Van valakinek otlete, hogy lehet megoldani ezt?
>
>
> itt a kod:
>
> import java.util.Map;
>
> public class Q {
>
> interface POJO { int asd(); }
>
> abstract class AbstractPOJO implements POJO { }
>
> class POJOA extends AbstractPOJO {
> @Override public int asd() { return 1; }
> public int pojoAValue() { return 1; }
> }
>
> class POJOB extends AbstractPOJO {
> @Override public int asd() { return 2; }
> public int pojoBValue() { return 2; }
> }
>
> class POJOC extends POJOB {
> @Override public int asd() { return 3; }
> public int pojoCValue() { return 3; }
> }
>
> interface DAO<P extends POJO> {
> P getPojo();
> void setPojo(P pojo);
> void update();
> }
>
> abstract class AbstractDAO<P extends POJO> implements DAO<P> {
> P pojo;
> @Override public P getPojo() { return this.pojo; }
> @Override public void setPojo(P pojo) { this.pojo = pojo; }
> }
>
> class DAOA<P extends POJOA> extends AbstractDAO<P> {
>
> @Override
> public void update() {
> System.out.println(String.format("in daoa pojoa value is %d",
> this.getPojo().pojoAValue())); //$NON-NLS-1$
> }
>
> }
>
> class DAOB<P extends POJOB> extends AbstractDAO<P> {
> @Override
> public void update() {
> System.out.println(String.format("in daob pojob value is %d",
> this.getPojo().pojoBValue())); //$NON-NLS-1$
> }
> }
>
> class DAOC<P extends POJOC> extends DAOB<P> {
> @Override
> public void update() {
> System.out.println(String.format("in daoa pojoc value is %d",
> this.getPojo().pojoCValue())); //$NON-NLS-1$
> }
> }
>
> abstract class AbstractFactory<T> {
> T target;
> abstract T createTarget(Node n);
> T getTarget() { return this.target; }
> void processParam(Node n) { }
> }
>
> abstract class AbstractDaoFactory<D extends AbstractDAO<P>, P extends
> POJO> extends AbstractFactory<D> { }
>
> class DAOAFactory extends AbstractDaoFactory<DAOA<POJOA>, POJOA> {
> @Override DAOA<POJOA> createTarget(Node n) { return new DAOA<>(); }
> }
>
> class DAOBFactory<D extends DAOB<P>, P extends POJOB> extends
> AbstractDaoFactory<D, P> {
>
> @Override D createTarget(Node n) { return return new DAOB<>(); } //
> Type mismatch: cannot convert from Q.DAOB<Q.POJOB> to D
> }
> -------------------------------------------------------------------------------------------------^
>
> class DAOCFactory extends DAOBFactory<DAOC<POJOC>, POJOC> {
> @Override DAOC<POJOC> createTarget(Node n) { return new DAOC<>();
> }
> }
>
> class Store {
> private Map<String, DAO<? extends POJO>> store;
>
> public Store() {
> DAOA<POJOA> daoa = new DAOA<>();
> this.store.put("", daoa); //$NON-NLS-1$
> }
> }
> }
>
> --
> thx,
> ----------------------------------
> Zoltan Zidarics programmer
> PTE-PMMFK H-7621 Pecs, Boszorkany u. 2. Hungary
> E-Mail: zamek at vili.pmmf.hu
> ----------------------------------
>
> _______________________________________________
> Javalist mailing list
> Javalist at lists.javaforum.hu
> http://lists.javaforum.hu/mailman/listinfo/javalist
További információk a(z) Javalist levelezőlistáról