[Javalist] Generics kerdes

zamek zamek at vili.pmmf.hu
2012. Május. 9., Sze, 10:56:03 CEST


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
----------------------------------
       



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