![](/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.