我发现了一个错误:
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) {
...
}为什么这是一个错误-我认为这应该是好的,因为对象实现了那个接口。
更新: Ok,我现在明白这个问题了(谢谢)。但问题仍然是,什么是解决这一问题的好办法?在我的例子中,我将始终得到Map<Cat>或Map<Dog>,而该地图只能从其中读取。
发布于 2018-01-14 21:25:09
如果您声明一个方法
protected void setProcessControl(Map<String, IOfficeXmlControl> procs)传递的参数只能是Map<String, IOfficeXmlControl>。如果希望允许所有实现类,则必须将声明更改为
protected void setProcessControl(Map<String, ? extends IOfficeXmlControl> procs)如果这不是一个选项,那么当您将映射传递给该方法时,您可能会做一个错误的攻击:
setProcessControl((Map<String, IOfficeXmlControl>) (Map) myMap);而不是一个错误,你会得到一个编译器警告,但调用应该工作。
https://stackoverflow.com/questions/48254211
复制相似问题