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>();