另一种方法是提供自己的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不相同,编译器将抛出错误.