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