[Javalist] Generics kerdes

Richard O. Legendi richard.legendi at gmail.com
2012. Május. 9., Sze, 11:13:26 CEST


> 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


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