J'ai un morceau de code que je pense devoir compiler, mais ce n'est pas le cas. Voici le code:Passer une liste concrète d'objets EnumMap à la liste générique du paramètre EnumMap provoque l'erreur de compilation
public class Program {
public void myMethod(List<EnumMap<? extends MyInterface, String>> map)
{
}
public void caller()
{
EnumMap<MyEnum, String> map = new EnumMap<MyEnum, String>(MyEnum.class);
List<EnumMap<MyEnum, String>> list = new LinkedList<EnumMap<MyEnum, String>>();
myMethod(list); //error argument type is not compatible
}
}
MyEnum est un ENUM qui implémente MyInterface. Pourquoi l'appel de myMethod (list) me donne le type d'argument n'est pas compatible?
Si je change la signature de myMethod à:
public void myMethod(List<? extends Map<? extends MyInterface, String>> map)
alors tout fonctionne très bien, mais je suis toujours perplexe et je souhaite savoir pourquoi la signature de méthode originale ne fonctionne pas.
Merci, je comprends ce que vous dites, mais comment faire pour changer la signature de la méthode au public void myMethod (List Extends Map Extends MyInterface, String >> map) fait disparaître l'erreur? L'erreur ne devrait-elle pas rester? – Alvin