另一种方法是提供您自己的Map
实现。如果您扩展现有实现并使用新类型,则不需要太多代码:
public class CompatibleHashMap<T> extends HashMap<ClassA<T>, ClassB<T>> {
}
现在, a CompatibleHashMap<String>
only 允许您将ClassA<String>
其作为键和ClassB<String>
值。
编辑:
正如您在评论中提到的那样,这样您就可以将自己与Map
实现联系起来。您可以通过执行以下操作来克服此问题:
public class CompatibleMap<T> implements Map<ClassA<T>, ClassB<T>> {
private Map<ClassA<T>, ClassB<T>> map;
public CompatibleMap(Map<ClassA<T>, ClassB<T>> map) {
this.map = map;
}
@Override
public Set<List<T>> keySet() {
return map.keySet();
}
// ... implement all other Map methods by calling the method on map.
}
然后你可以像这样实例化它
CompatibleMap<String> map = new CompatibleMap<>(new HashMap<ClassA<String>, ClassB<String>>());
这样,您就不会被绑定到特定的实现,如果,和Map
的泛型类型不同,编译器将抛出错误。map
ClassA
ClassB