![](/img/trans.png)
[英]Why is there a 'remove(key, value)' method in the Map interface?
[英]Issue with interface as Map key & value
在一个图书馆项目中,我有:
public interface InterfaceA {
}
public interface InterfaceB {
}
public void myMethod(Map<? extends InterfaceA, List<? extends InterfaceB>> map) {
//do something
}
然后,我有另一个项目(具有此库作为依赖项),其中包含两个实现这些接口的对象:
public class ObjectA implements InterfaceA {
}
public class ObjectB implements InterfaceB {
}
当我尝试像这样调用库方法myMethod
:
HashMap<ObjectA, List<ObjectB>> hashMap = new HashMap<>();
//populate hashmap
myMethod(hashMap);
我收到一个编译警告,提示参数不匹配。
我在这里想念什么? 它和地图有关吗?
编辑:确切的错误(实际上不是警告)是:
incompatible types: HashMap<ObjectA,List<ObjectB>> cannot be converted to Map<? extends InterfaceA,List<? extends InterfaceB>>
泛型是不变的。
如果您的方法声明:
Map<? extends InterfaceA, List<? extends InterfaceB>>
然后,第二个类型参数必须恰好是 List<? extends InterfaceB>
List<? extends InterfaceB>
。
您可以使用以下方法修复它:
Map<? extends InterfaceA, ? extends List<? extends InterfaceB>>
代替。
您可以为此修改Hashmap创建:
Map<? extends InterfaceA, List<? extends InterfaceB>> hashMap = new HashMap<>();
或为此修改方法定义:
public <A extends InterfaceA, B extends InterfaceB> void myMethod(Map<A, List<B>> map) {
//do something
}
将您的地图声明为
HashMap<ObjectA, List<? extends InterfaceB>> hashMap = new HashMap<ObjectA, List<? extends InterfaceB>>();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.