J'ai la méthode Java
suivante implémentée en raison d'une interface:
public String importDocument(ImportSource source, Map<String, ? extends Object> paramMap);
Lorsque j'essaie de faire ce qui suit, je reçois un avertissement de compilation. Fragment:
paramMap.put("Key", "Value");
Erreur:
La méthode put (String, capture # 1-of? Extend Object) dans le type Map n'est pas applicable pour les arguments (String, String)
Pourquoi?
? extends Object
Vous utilisez un caractère générique générique. Vous ne pouvez pas effectuer d'opération d'ajout car le type de classe n'est pas déterminé. Vous ne pouvez rien ajouter/mettre (sauf null).
Pour plus de détails sur l'utilisation des caractères génériques, vous pouvez consulter Oracle docs .
Collection<?> c = new ArrayList<String>();
c.add(new Object()); // Compile time error
Puisque nous ne savons pas ce que représente le type d'élément de c, nous ne pouvons pas y ajouter d'objets. La méthode add()
prend les arguments de type E
, Le type d'élément de la collection. Lorsque le paramètre de type réel est ?
, Il représente certains unknown type
. Tout paramètre que nous passerons pour ajouter devrait être un sous-type de ce type inconnu. Puisque nous ne savons pas de quel type il s'agit, nous ne pouvons rien transmettre. The sole exception is null, which is a member of every type
.