Re: generika a '? extends Xxx'

2010-11-25 Tema obsahu Kamil Podlesak
Ano, to je asi nejčastější použití. To že takto deklarovaný parametr je efektivně read-only (pokud tedy mluvíme o kolekcích) je dobré, dokonce žádoucí. U proměnných situace trochu jiná... Kamil Podlešák 2010/11/25 "Zdeněk Troníček" > Konstrukci ? extends Neco bych nezavrhoval, protoze je užiteč

Re: generika a '? extends Xxx'

2010-11-25 Tema obsahu Zdeněk Troníček
Konstrukci ? extends Neco bych nezavrhoval, protoze je užitečná pro parametry metody. Př.: metoda, která provede nějakou operaci se všemi prvky seznamu, v němž je každý prvek typu Number. void perform(List p) { for (Number n : p) { process(n); } } void process(Number n) { ... } T

Re: generika a '? extends Xxx'

2010-11-25 Tema obsahu Josef Cacek
Ahoj, 2010/11/25 Martin Kuba : > Ještě si s tím hraju, a zjistil jsem, že do >  List l; > nejde přidat vůbec nic, a to dokonce ani >  l.add( l.get(0) ); Tohle sice ne, ale null (jako jediná hodnota) se přidat dá :-) > Je to sice logické, ale naprosto protiintuitivní. > Makub -- pepa cacek

Re: generika a '? extends Xxx'

2010-11-25 Tema obsahu Martin Kuba
Ještě si s tím hraju, a zjistil jsem, že do List l; nejde přidat vůbec nic, a to dokonce ani l.add( l.get(0) ); Je to sice logické, ale naprosto protiintuitivní. Makub -- ~~ Supercomputing Center Brno Martin Kuba Instit

Re: generika a '? extends Xxx'

2010-11-25 Tema obsahu Martin Kuba
Jenom poznámku: Dne 25.11.2010 10:00, Kamil Podlesak napsal(a): Ještě intuitivnější vysvětlení je s kolekcemi: List l; if (externifunkce()) { l = new ArrayList(); } else { l = new ArrayList(); Tohle taky přes kompilátor neprojde: l.add(new C()); } //a toto nesmi byt povoleno, pr

Re: generika a '? extends Xxx'

2010-11-25 Tema obsahu Martin Beranek
Dne 25.11.2010 10:08, Tomáš Záluský napsal(a): > > Podle mne je problém v DaoA dao = new DaoB(); - tam dochází ke > zbytečnému zobecnění, protože pro takto nadeklarovanou referenci dao už > překladač neví, že na ní smí volat jen doSomething(B). > Podle názvů tříd to na mě působí dojmem, že A je

Re: generika a '? extends Xxx'

2010-11-25 Tema obsahu Martin Beranek
diky, pekne vysvetleni (obe dve), je mi jasne proc to nejde Dne 25.11.2010 10:00, Kamil Podlesak napsal(a): > > Ještě intuitivnější vysvětlení je s kolekcemi: > > List l; > if (externifunkce()) { >l = new ArrayList(); > } else { >l = new ArrayList(); > l.add(new C()); > } > //a toto n

Re: generika a '? extends Xxx'

2010-11-25 Tema obsahu Tomáš Záluský
__ > Od: "Martin Beranek" > Komu: konference@java.cz > Datum: 25.11.2010 08:26 > Předmět: Re: generika a '? extends Xxx' > >Tak si trošku odpovím sám. Je třeba použít T, ale neřeší to >můj problém... > &g

Re: generika a '? extends Xxx'

2010-11-25 Tema obsahu Kamil Podlesak
Ještě intuitivnější vysvětlení je s kolekcemi: List l; if (externifunkce()) { l = new ArrayList(); } else { l = new ArrayList(); l.add(new C()); } //a toto nesmi byt povoleno, protoze l muze byt List ! l.add( new B() ); Kamil Podlešák

Re: generika a '? extends Xxx'

2010-11-25 Tema obsahu Kamil Podlesak
Krátká verze = praktická rada: Konstrukci ? extends (a super) se snažte vždy vyhnout. Zvlášť u proměnných. Pro správné pochopení je potřeba plně rozumět kovarianci a kontravanrianci (http://en.wikipedia.org/wiki/Covariance_and_contravariance_%28computer_science%29), nicméně i tak to nemusí být int

Re: generika a '? extends Xxx'

2010-11-25 Tema obsahu Martin Kuba
Dne 25.11.2010 08:26, Martin Beranek napsal(a): Tak si trošku odpovím sám. Je třeba použít T, ale neřeší to můj problém... private class A {} private class B extends A {} private abstract class DaoA { void doSomething(T param) {} } private class DaoB extends DaoA {} a pak potr

Re: generika a '? extends Xxx'

2010-11-24 Tema obsahu Martin Beranek
Tak si trošku odpovím sám. Je třeba použít T, ale neřeší to můj problém... private class A {} private class B extends A {} private abstract class DaoA { void doSomething(T param) {} } private class DaoB extends DaoA {} a pak potrebuji DaoA dao = new DaoB(); dao.doSomething(new B()

generika a '? extends Xxx'

2010-11-24 Tema obsahu Martin Beranek
Zdravím, proč toto nefunguje? private class B {} private class Test { void doSomething(T param) {} } a nekde potrebuji Test t = new Test(); t.doSomething(new B()); // toto nelze zkompilovat diky -- Martin Beránek ICZ a.s., Pobočka Brno Londýnské náměstí 2/856, 639 00 Brno Tel.: