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>>();

你的方法声明中缺少>吗?我修复了帖子。原始代码正确吗?粘贴,不要转述,警告。可能的答案是:原因是什么?谢谢!即使我不清楚这里的语法,这也起到了作用。很明显,我必须多读一些关于泛型的书。