方法类型Map <string,capture#1-of?=“”extends =“”object =“”>不适用</string,capture#1-of>

时间:2014-01-10 09:58:14

标签: java generics compiler-errors

我通过接口实现了以下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)

为什么?

1 个答案:

答案 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