2011/4/13 Miroslav Paulfranc <[email protected]>

> Dobrý den.
> Myslím si, že
>
> datumyNarozeni.get(p.getLogin());
>
> by nešlo použít, pokud by byl klíč složený z více položek.
> Pokud by objekt Person měl např. string name a string surname, nebo by
> došlo následně k dalšímu rozšíření - např. o rok narození, stačilo by myslím
> pouze náležitě změnit hash a equals a vše by pořád fungovalo.
>
>
Pak ale nemohu přes "michal" vkládat do mapy. To bych musel použít třeba
"michal,ježek,1987-03-09"
a odpovídajícím způsobem naimplementovat ten equals() a hashCode(). Ale co
když někdo zapomene,
že se teď už musí používat datum narození a zadá jenom "michal,ježek"?


> > ------------ Původní zpráva ------------
> > Od: Ondřej Fafejta <[email protected]>
> > Předmět: Re: Proč není genericita v metodách Map jako get(), remove()?
> > Datum: 13.4.2011 08:38:05
> > ----------------------------------------
> > 2011/4/13 Martin Beránek <[email protected]>:
> > > Zdravím,
> > >
> > > našel jsem celkem rozumné vysvětlení:
> > >
> > > Restrikce se zavádějí proto, aby se něco nepokazilo.
> > >
> > > Zavoláním get s jiným typem se nic nepokazí. Ještě trošku umělý
> příklad:
> > >
> > > Map<String,Date> datumyNarozeni = ...
> > > class Person {
> > >        String fullName
> > >        String login
> > >
> > >        hashCode {
> > >                return login.hashCode();
> > >        }
> > >
> > >        equals(Object o) {
> > >                return login.equals(o);
> > >        }
> > > }
> > >
> > > datumyNarozeni.put("michal",new Date());
> > >
> > > odnekud mi prijde objekt Person p kde je login michal, pak muzu udelat:
> > >
> > > datumyNarozeni.get(p) a dostanu to spravne datum
> > >
> > > Martin
> > >
> >
> > tak tento příklad se mi hodně nelíbí. Takového programátora zatahat za
> uši ;-)
> > Nebudu koukat do implementace Person, jak je napsaný hashCode a equals
> ...
> > Určitě by každý normální programátor napsal toto:
> >
> > datumyNarozeni.get(p.getLogin());
> >
> > V každém případě - původní dotaz je docela namístě.
> > Úryvek ze stackoverflow mě úplně nepřesvědčil ...
> > Kdyby člověk použil
> > Map<List, Something> místo Map<ArrayList, Something>, tak by to
> > fungovalo i s ArrayList i s LinkedList.
> >
> > Fafi
> >
> >
> >
>



-- 
Oto 'tapik' Buchta, [email protected], http://tapikuv.blogspot.com

Odpovedet emailem