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č
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
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
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
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
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
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
__
> 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
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
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
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
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()
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.:
13 matches
Mail list logo