Method in the type Map<String,capture#1-of ? extends Object> is not applicable
由于接口的原因,我实现了以下JAVA方法:
1
| public String importDocument (ImportSource source, Map <String, ? extends Object > paramMap ); |
当我尝试执行以下操作时,会收到编译警告。片段:
1
| paramMap.put("Key","Value"); |
错误:
The method put(String, capture#1-of ? extends Object) in the type Map is not applicable for the arguments (String, String)
为什么?
您使用的是通用通配符。无法执行添加操作,因为类类型不确定。不能添加/放置任何内容(空值除外)。
有关使用通配符的更多详细信息,请参阅Oracle文档。
1 2
| 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。
- 这是否意味着,如果我需要为参数添加一个值,我必须创建一个包含所有值的新映射,然后使用它?
- 如果您想添加参数,那么不要使用通配符,而是使用Map。
- 不管怎样,? extends Object毫无意义,因为每个类都有资格作为参数。
- 我不能改变它,它是一个定义良好的接口,我必须按原样使用它。但我不太明白。Map和Map有什么区别?
- @你可能想看看这个问题。
- 好的,我明白了。谢谢。
- 或者,也可以解决它(如果T是函数的类型参数)。