Dne 25.11.2010 08:26, Martin Beranek napsal(a):
Tak si trošku odpovím sám. Je třeba použít T<? super B>, ale neřeší to
můj problém...

private class A {}

private class B extends A {}
        
private abstract class DaoA<T extends A>  {
     void doSomething(T param) {}
}

private class DaoB extends DaoA<B>  {}

a pak potrebuji

DaoA<? extends A>  dao = new DaoB();
dao.doSomething(new B()); // nejde přeložit

Hm, generika dovedou být dost neintuitivní. Musel jsem si znovu přečíst
http://java.sun.com/j2se/1.5/pdf/generics-tutorial.pdf
abych to pochopil. Vysvětlení je na straně 7 nahoře, v jednodušší
formě se to dá demonstrovat na tomhle příkladu:

Set<? extends Object> s = new HashSet<String>();
s.add("ZZZ"); //nejde přeložit

Jde o to, že <? extends Object> může být cokoliv, třeba Float, nemusí to být
String, takže kompilátor nemůže dovolit do takové množiny String přidat.
Musí se to napsat právě jako

Set<? super String> s = new HashSet<String>();
s.add("ZZZ"); //v pořádku

Makub
--
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Supercomputing Center Brno             Martin Kuba
Institute of Computer Science    email: [email protected]
Masaryk University             http://www.ics.muni.cz/~makub/
Botanicka 68a, 60200 Brno, CZ     mobil: +420-603-533775
--------------------------------------------------------------

Odpovedet emailem