[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