Tak sem na to asi došel, viz příklad v příloze. Ono to totiž takovou mapu zadefinovat pomocí generik vlastně nejde... nebo jde, ale její použití pak bude silně limitující.

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
	}

}

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

Odpovedet emailem