J'ai un problème avec les caractères génériques imbriqués bornés dans les génériques Java.Java générique joker imbriqué ne compilera pas
est ici une affaire commune:
public void doSomething(Set<? extends Number> set) {}
public void callDoSomething() {
Set<Integer> set = new HashSet<Integer>();
doSomething(set);
}
C'est générique Java standard, fonctionne très bien.
Toutefois, si le caractère générique devient imbriqué, il ne fonctionne plus:
public void doSomething(Map<String, Set<? extends Number>> map) {}
public void callDoSomething() {
Map<String, Set<Integer>> map = new HashMap<String, Set<Integer>>();
doSomething(map);
}
Cela conduit à une erreur du compilateur.
J'ai essayé une variété de conversions et de permutations génériques, mais je n'arrive pas à faire fonctionner cela. Je ne me souviens pas avoir vu ce problème auparavant, et j'ai travaillé avec les génériques pendant des années. Suis-je juste trop fatigué et manque quelque chose d'évident?
Il y a une explication pour cette dans la FAQ de Java Generics: http://www.angelikalanger.com/GenericsFAQ/FAQSections /TypeArguments.html#FAQ104 –