web-dev-qa-db-fra.com

Méthode de type Map <String, capture # 1-of? étend l'objet> n'est pas applicable

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?

20
Emaborsa
? 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.

22
Aniket Thakur