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

Odpovedet emailem