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)*?
-- Martin Beránek ICZ a.s., Pobočka Brno http://www.i.cz
public class Main {
static class BadMap<K, V> {
void put(K key, V value) {
}
V get(K key) {
return null;
}
}
static class Foo {}
static class ExtFoo extends Foo {}
public static void main(String[] args) {
BadMap<Foo, String> map1 = new BadMap<Foo, String>();
BadMap<ExtFoo, String> map2 = new BadMap<Main.ExtFoo, String>();
readFromMap(map1);
readFromMap(map2); // ERROR
universalReadFromMap(map1);
universalReadFromMap(map2);
;
}
public static void readFromMap(BadMap<Foo, String> m) {
Foo f = new Foo();
m.get(f);
}
public static void universalReadFromMap(BadMap<? extends Foo, String> m) {
Foo f = new Foo();
m.get(f); // ERROR
}
}
smime.p7s
Description: S/MIME Cryptographic Signature
