Java不接受Map<String,MyClass的参数>当方法签名是Map<String,IMyInterface时>MyClass实现了IMyInterface



我收到错误:

Error:(6356, 38) java: incompatible types: java.util.Map<java.lang.String,net.windward.format.wordml.WordMLParser.WordMLControl> cannot be converted to java.util.Map<java.lang.String,net.windward.format.OfficeMLParserBase.IOfficeXmlControl>

我通过的班级是:

private abstract static class WordMLControl implements IOfficeXmlControl {
...
}

方法是:

protected void setProcessControl(Map<String, IOfficeXmlControl> procs) {
...
}

为什么这是一个错误 - 我认为这应该没问题,因为对象实现了该接口。

更新:好的,我现在明白这个问题了(谢谢乔恩)。但问题仍然存在,对此有什么好的解决方案?就我而言,我总是会得到Map<Cat>Map<Dog>,并且该地图只能从中读取。

如果声明一个方法

protected void setProcessControl(Map<String, IOfficeXmlControl> procs)

传递的参数只能是Map<String, IOfficeXmlControl>。如果要允许所有实现类,则必须将声明更改为

protected void setProcessControl(Map<String, ? extends IOfficeXmlControl> procs)

如果这不是一个选项,您可以在将地图传递给该方法时进行错误的黑客攻击:

setProcessControl((Map<String, IOfficeXmlControl>) (Map) myMap);

您收到的不是错误,而是编译器警告,但调用应该有效。

相关内容

最新更新