別の方法は、独自のMap
実装を提供することです。既存の実装を拡張し、新しいタイプを使用する場合、必要なコードはそれほど多くありません。
public class CompatibleHashMap<T> extends HashMap<ClassA<T>, ClassB<T>> {
}
今では、キーと値としてCompatibleHashMap<String>
のみ置くことができます。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