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