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
Dne 13.4.2011 07:44, Libor Jelinek napsal(a):
Dobrý den!
Studuju collection framework a mám k otázku rozhraní Map. To má uvedeno,
že je to pár key-value <K, V>.
/java.util
Interface Map<K,V>
Type Parameters:K - the type of keys maintained by this mapV - the type
of mapped values/
Proč tedy metoda jako *containsKey()* je deklarována jako
*containsKey(Object key)* a nikoli *containsKey(K key)*?
Dále např. proč je *V get(Object key)* a nikoli *V get(K key)*? Poč je
*V remove(Object key)* a nikoli *V remove(K key)*?
A to i v JDK7 - tedy dávno dávno po zavedení genericity. Možná to mi
něco nedochází jako začátečníkovi, ale pak mě to vrací k beztypovým
kolekcím z JDK4 a umožňuje pěkné čunárničky jako, že místo type error
dostanu jen null když jako jako klíč jasně označený v deklaraci jako
Integer můžu používat klidně String, Float, ale i ZipEntry - zkrátka
potomek Object, tedy cokoli:
import java.util.*;
public class MapPokus1 {
public static void main(String[] args) {
HashMap<Integer, String> psc = new HashMap<Integer, String>();
psc.put(12000, "Praha 1");
psc.put(28101, "Velim");
System.out.println(psc.get(28101)); // Velim
System.out.println(psc.get(28101)); // Velim
System.out.println(psc.get("28101")); // žádná chyba jen
null !!!
System.out.println(psc.get(3.14)); // žádná chyba jen
null !!!
System.out.println(psc.get(new ZipEntry("soub.txt") ));
// žádná chyba jen null !!!
}
}
Díky
Libor
-- Martin Beránek ICZ a.s., Pobočka Brno
smime.p7s
Description: S/MIME Cryptographic Signature
