¿Cómo declarar un mapa con genéricos variables?

tengo unMap cuyas claves son de tipo genéricoKey<T>, y los valores son de tipoList<T>. Si la clave es una instancia deKey<String>, el valor debe ser unList<String>, y la misma regla se aplica a cualquier otro par clave-valor. He intentado lo siguiente pero no compila:

Map<T, List<T>> map;

En la actualidad tengo que declararlo con genéricos "parciales":

Map<Object, List> map;

Sé que esto es malo, pero actualmente no tengo mejor opción. ¿Es posible usar genéricos en esta situación?

ACTUALIZAR

Tal vez no expresé mi problema claramente. Quiero un mapa que sea capaz de:

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

Y el siguiente código no debe compilar:

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

La clave y el valor siempre deben tener el mismo tipo genérico, mientras que el tipo genérico puede ser cualquiera, y obviamente la extensión de un mapa no cumple con mi requisito.

Respuestas a la pregunta(2)

Su respuesta a la pregunta