Pour la vie de moi, je ne comprends pas pourquoi le compilateur ne me laisse pas faire ce qui suit ...Pourquoi cette utilisation de Java Generics n'est-elle pas compilée?
import java.util.HashMap;
import java.util.Map;
public class TestMap {
private final Map<Integer, ? extends Number> map = new HashMap<Integer, Number>();
public void put(Integer key, Long item) {
this.map.put(key, item);
}
}
Pourquoi ligne this.map.put(key, item)
provoquer une erreur de compilation? Je sais que je peux changer la déclaration de carte pour utiliser Number
plutôt que ? extends Number
pour que cela fonctionne mais il me semble que ce que je fais est parfaitement légal, et je préférerais ne pas autoriser les objets Nombre dans la carte . J'utilise Java 1.6.0_13.
Contrairement à ce que vous pensez, '? extends Number' autorisera les objets Number. Le '? étend le caractère générique borné X "X ou une sous-classe de X". – Pesto
Incidemment, 'Number' est un' extends Number> 'même si l'insertion dans une liste générique était possible, elle n'atteindrait pas ce que vous voulez. Le fait que 'Number' soit abstrait volonté. –
Vous pouvez faire ((Map) carte) .put (clé, élément); si vous êtes sûr du type. –