[Javalist] Generics kerdes

János Háber janos.haber at javaportal.hu
2012. Május. 9., Sze, 11:14:39 CEST


Na mondjuk az lehet... :)

2012/5/9 Richard O. Legendi <richard.legendi at gmail.com>:
>> bar a kod kicsit kusza, mivel gondolom valami html szuro kivette a <>
>> kozti reszt. De logikus hogy nem fog menni.
>
>
> Az Java 7 tippre.
>
> Ricsi
>
>
> On 2012.05.09. 11:12, János Háber wrote:
>>
>> 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
>>
>> _______________________________________________
>> Javalist mailing list
>> Javalist at lists.javaforum.hu
>> http://lists.javaforum.hu/mailman/listinfo/javalist
>
> _______________________________________________
> 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