另一種方法是提供自己的Map實現.如果擴展現有實現并使用新類型,則不需要太多代碼:
public class CompatibleHashMap extends HashMap, ClassB> {
}
現在,一個CompatibleHashMap< String>只允許你把ClassA< String>作為鍵和ClassB< String>作為價值觀.
編輯:
正如您在評論中提到的那樣,這樣您就可以將自己與Map實現聯系起來.您可以通過執行以下操作來解決此問題:
public class CompatibleMap implements Map, ClassB> {
private Map, ClassB> map;
public CompatibleMap(Map, ClassB> map) {
this.map = map;
}
@Override
public Set> keySet() {
return map.keySet();
}
// ... implement all other Map methods by calling the method on map.
}
然后你可以實例化它
CompatibleMap map = new CompatibleMap<>(new HashMap, ClassB>());
這樣,您不依賴于特定的Map實現,如果映射的泛型類型ClassA和ClassB不相同,編譯器將拋出錯誤.