簡體   English   中英

界面作為地圖鍵和值的問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM