Comment déclarer une carte avec des variables génériques?

J'ai un Map dont les touches sont de type générique Key<T>, et les valeurs sont de type List<T>. Si la clé est une instance de Key<String>, la valeur doit être un List<String>, et la même règle s'applique à toutes les autres paires clé-valeur. J'ai essayé ce qui suit, mais il ne compile pas:

Map<T, List<T>> map;

À l'heure actuelle, je dois le déclarer avec "partielle" génériques:

Map<Object, List> map;

Je sais que c'est mauvais, mais je n'ai actuellement pas de meilleur choix. Est-il possible d'utiliser des génériques dans cette situation?

Mise à JOUR

Peut-être que je n'exprime pas mon problème clairement. Je veux une carte qui est en mesure de:

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

Et le code suivant ne devrait pas compiler:

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

La clé et la valeur doit toujours avoir le même type générique, tandis que le type générique peut être tout, et, évidemment, l'extension d'une carte ne répond pas à mes besoins.

l'espace ne doit pas être la question. Il est probable que la manière dont il est utilisé. OP besoin de montrer plus de code à corriger.
Êtes-vous à l'aide des touches de type T, ou les touches de type Key<T>?
Avec votre scénario, vous devez utiliser l'encapsulation pour résoudre votre problème comme Nishant et Geoff les états dans leurs réponses, juste l'adapter à votre propre code.
L'Encapsulation ne fonctionne pas ici, car je n'ai qu'une seule carte. Je ne veux pas déclarer Test<String>, Test<Integer>, etc.

OriginalL'auteur Zhao Yi | 2012-07-16