类型Map <String中的方法,捕获#1-of?extends Object>不适用

Ema*_*rsa 20 java generics compiler-errors

JAVA由于接口,我实现了以下方法:

public String importDocument(ImportSource source, Map<String, ? extends Object> paramMap);
Run Code Online (Sandbox Code Playgroud)

当我尝试做以下时,我收到编译警告.片段:

paramMap.put("Key", "Value");
Run Code Online (Sandbox Code Playgroud)

错误:

方法put(String,capture#1-of?extends Object)在Map类型中不适用于参数(String,String)

为什么?

Ani*_*kur 22

? extends Object
Run Code Online (Sandbox Code Playgroud)

您正在使用通用通配符.您无法执行添加操作,因为类类型不是确定的.你不能添加/放置任何东西(除了null).

有关使用通配符的更多详细信息,请参阅oracle docs.

Collection<?> c = new ArrayList<String>();
c.add(new Object()); // Compile time error
Run Code Online (Sandbox Code Playgroud)

由于我们不知道c的元素类型代表什么,我们无法向其添加对象.该add()方法接受type E集合的元素类型的参数.当实际的类型参数是?,它代表一些unknown type.我们传递给add的任何参数都必须是这种未知类型的子类型.既然我们不知道那是什么类型,我们就无法传递任何东西The sole exception is null, which is a member of every type.

  • @Emaborsa你可能想看到这个[问题](http://stackoverflow.com/questions/17834145/whats-the-use-of-saying-extends-someobject-instead-of-someobject/17834223#17834223). (3认同)