接口问题为Map键&值

时间:2016-08-30 12:53:39

标签: java

在图书馆项目中,我有:

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>>

3 个答案:

答案 0 :(得分:3)

泛型是不变的。

如果您的方法声明:

Map<? extends InterfaceA, List<? extends InterfaceB>>

然后第二个类型参数必须完全 List<? extends InterfaceB>

您可以使用以下方法修复它:

Map<? extends InterfaceA, ? extends List<? extends InterfaceB>>

相反。

答案 1 :(得分:1)

您可以为此修改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
  }

答案 2 :(得分:0)

将地图声明为

HashMap<ObjectA, List<? extends InterfaceB>> hashMap = new HashMap<ObjectA, List<? extends InterfaceB>>();