Java 接口作为映射键和值的问题
在图书馆项目中,我有:Java 接口作为映射键和值的问题,java,Java,在图书馆项目中,我有: public interface InterfaceA { } public interface InterfaceB { } public void myMethod(Map<? extends InterfaceA, List<? extends InterfaceB>> map) { //do something } 当我尝试像这样调用库方法myMethod时: HashMap<ObjectA, List<ObjectB&g
public interface InterfaceA {
}
public interface InterfaceB {
}
public void myMethod(Map<? extends InterfaceA, List<? extends InterfaceB>> map) {
//do something
}
当我尝试像这样调用库方法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您可以为此修改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
}
或为此修改您的方法定义:
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>>();
你的方法声明中缺少>吗?我修复了帖子。原始代码正确吗?粘贴,不要转述,警告。可能的答案是:原因是什么?谢谢!即使我不清楚这里的语法,这也起到了作用。很明显,我必须多读一些关于泛型的书。