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

Attachment: smime.p7s
Description: S/MIME Cryptographic Signature

Odpovedet emailem