Как объявить карту с переменными дженериками?

У меня есть Map, ключи которого имеют универсальный тип Key<T>, а значения имеют тип List<T>. Если ключ является экземпляром Key<String>, значение должно быть List<String>, и то же правило применяется к любым другим парам значений ключа -. Я пробовал следующее, но оно не компилируется:

Map<T, List<T>> map;

В настоящее время я должен объявить его с помощью «частичных» дженериков :

Map<Object, List> map;

. Я знаю, что это плохо, но в настоящее время у меня нет лучшего выбора. Можно ли использовать дженерики в этой ситуации?

ОБНОВЛЕНИЕ

Возможно я не ясно выразил свою проблему. Мне нужна карта, способная:

map.put(new Key<String>(), new ArrayList<String>());
map.put(new Key<Integer>(), new ArrayList<Integer>());

И следующий код не должен компилироваться:

map.put(new Key<String>(), new ArrayList<Integer>());

Ключ и значение всегда должны иметь один и тот же универсальный тип, в то время как универсальный тип может быть любым, и, очевидно, расширение карты не соответствует моему требованию.

8
задан Zhao Yi 16 July 2012 в 04:40
поделиться