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.



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

Odpovedet emailem