[Javalist] Generics kerdes

Istvan Verhas istvan at verhas.com
2012. Május. 9., Sze, 11:11:45 CEST


A DAOAFactory-nál még sikerült leírnod, hogy az egy olyan factory ami nem paraméterezhető viszont kiterjesztése az AbstractFactory-nak a <DAOA<POJOA>, POJOA paraméterekkel. Ezt próbáltad le	rni a DAOB esetén is de olyan áttételesen amit a fordító már nem tudott követni és ráadásul paraméterezhetővé tetted a DAOBFactory-t pedig szerintem nem akartad.

Verhás István
JIRA szakértő
Verhás & Verhás Szoftver Manufaktúra Kft.
istvan at verhas.com
t: +36(30)3997117
skype: verhasi

On May 9, 2012, at 10:56 AM, zamek 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

-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 3015 bytes
Desc: not available
URL: <http://lists.javaforum.hu/pipermail/javalist/attachments/20120509/d87b58c4/attachment.bin>


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