Le générique générique nested Java ne sera pas compilé

J’ai un problème avec les caractères génériques nesteds liés dans les génériques Java.

Voici un cas commun:

public void doSomething(Set set) {} public void callDoSomething() { Set set = new HashSet(); doSomething(set); } 

Ceci est des génériques standard Java, fonctionne bien.

Toutefois, si le caractère générique devient nested, il ne fonctionne plus:

 public void doSomething(Map<String, Set> map) {} public void callDoSomething() { Map<String, Set> map = new HashMap<String, Set>(); doSomething(map); } 

Cela conduit à une erreur du compilateur.

J’ai essayé une variété de conversions et de permutations génériques, mais je ne parviens pas à faire fonctionner cela. Je ne me souviens pas d’avoir vu ce problème auparavant et je travaille avec des génériques depuis des années. Suis-je trop fatigué et manque quelque chose d’évident?

Le problème est que doSomething pourrait être implémenté en tant que:

 public void doSomething(Map> map) { Set set = ...; map.put("xyz", set); } 

Vous devez décider de ce que vous voulez réellement dire.

Probablement quelque chose comme:

 public void doSomething(Map> map) {} 

cela fonctionnera pour vous:

 public void doSomething(Map> map) {} 

Pour que le code fonctionne, créez HashMap en tant que:

 Map> map = new HashMap>();