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
