我通过接口实现了以下JAVA
方法:
public String importDocument(ImportSource source, Map<String, ? extends Object> paramMap);
当我尝试执行以下操作时,我收到编译警告。 片段:
paramMap.put("Key", "Value");
错误:
类型Map中的方法put(String,capture#1-of?extends Object)不适用于参数(String,String)
为什么?
答案 0 :(得分:22)
? extends Object
您正在使用通用通配符。您无法执行添加操作,因为类类型不是确定的。你不能添加/放置任何东西(除了null)。
有关使用通配符的更多详细信息,请参阅oracle docs。
Collection<?> c = new ArrayList<String>();
c.add(new Object()); // Compile time error
由于我们不知道c的元素类型代表什么,我们无法向其添加对象。 add()
方法接受type E
的参数,即集合的元素类型。当实际类型参数为?
时,它代表某些unknown type
。我们传递给add的任何参数都必须是这种未知类型的子类型。由于我们不知道它是什么类型,我们无法传递任何内容。The sole exception is null, which is a member of every type
。