Java:声明具有两个相关泛型类型的映射(<;T>;Map<;Class<;?扩展ClassA<;T>;;类<;?扩展ClassB<;T>;)

Java:声明具有两个相关泛型类型的映射(<;T>;Map<;Class<;?扩展ClassA<;T>;;类<;?扩展ClassB<;T>;),java,generics,Java,Generics,是否可以声明一个映射,从特定子类的键映射到特定子类的值,但确保两个类共享相同的类型参数 背景: ClassA和ClassB都实现了公共资源的行为 public abstract class ClassA<T> { public abstract T getResource() ; } public abstract class classB<T> { public abstract void consoumeResource(T resou

是否可以声明一个映射,从特定子类的键映射到特定子类的值,但确保两个类共享相同的类型参数

背景:

ClassA和ClassB都实现了公共资源的行为

public abstract  class ClassA<T> {
      public abstract T getResource() ;
}

public abstract class classB<T> {
       public  abstract void consoumeResource(T resource);
}
公共抽象类ClassA{
公共摘要T getResource();
}
公共抽象类B{
公共资源(T资源);
}

我想从ClassA和ClassB的实现映射,并确保只有“兼容”对可以放在一个条目中。

在映射声明中不能这样做,但可以使用访问/更新映射的方法来实现

e、 g

private final Map builderMap=new LinkedHashMap();
公共void addBuilder(类tClass,Builder-tBuilder){
builderMap.put(tClass,tBuilder);
}
公共生成器getbuilder(类tClass){
@抑制警告(“未选中”)
Builder tBuilder=(Builder)builderMap.get(tClass);
返回tBuilder;
}

另一种方法是提供自己的
Map
实现。如果扩展现有实现并使用新类型,则不需要太多代码:

public class CompatibleHashMap<T> extends HashMap<ClassA<T>, ClassB<T>> {

}
然后可以像下面这样实例化它

CompatibleMap<String> map = new CompatibleMap<>(new HashMap<ClassA<String>, ClassB<String>>());
CompatibleMap-map=newcompatiblemap(newhashmap());

这样,您就不会绑定到特定的
Map
实现,如果
Map
ClassA
ClassB
的泛型类型不相同,编译器就会抛出错误。

这不是我想要的,当我将自己与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>>());