Method in the type Map<String,capture#1-of ? extends Object> is not applicable

49,525
? extends Object

You are using generic wildcard. You cannot perform add operation as class type is not determinate. You cannot add/put anything(except null).

For more details on using wildcard you can refer oracle docs.

Collection<?> c = new ArrayList<String>();
c.add(new Object()); // Compile time error

Since we don't know what the element type of c stands for, we cannot add objects to it. The add() method takes arguments of type E, the element type of the collection. When the actual type parameter is ?, it stands for some unknown type. Any parameter we pass to add would have to be a subtype of this unknown type. Since we don't know what type that is, we cannot pass anything in. The sole exception is null, which is a member of every type.

Share:
49,525

Related videos on Youtube

Emaborsa
Author by

Emaborsa

Started as Java developer....switched do C#

Updated on November 17, 2020

Comments

  • Emaborsa
    Emaborsa over 3 years

    I have the following JAVA method implemented due a interface:

    public String importDocument(ImportSource source, Map<String, ? extends Object> paramMap);
    

    When i try to do following, i get an compile warning. Snippet:

    paramMap.put("Key", "Value");
    

    Error:

    The method put(String, capture#1-of ? extends Object) in the type Map is not applicable for the arguments (String, String)

    Why?

  • Emaborsa
    Emaborsa over 10 years
    Does it mean, that if i need to add a value to the params, i must create a new map with all values and use this instead?
  • Aniket Thakur
    Aniket Thakur over 10 years
    If you want to add params then dont use wildcard use Map<String,Object> instead.
  • Aniket Thakur
    Aniket Thakur over 10 years
    Anyway ? extends Object makes no sense as every class is eligible as the argument.
  • Emaborsa
    Emaborsa over 10 years
    I can't change it, is a well defined interface which i must use as it is. However i don't really get it. What is the difference between Map<String, ?> and Map<String, ? extends Something>
  • Aniket Thakur
    Aniket Thakur over 10 years
    @Emaborsa you may want to see this question.
  • rlegendi
    rlegendi over 10 years
    Or <String, T extends Object> would also solve it (if T is a type param for the function).