gpt4 book ai didi

Java:声明具有两个相关泛型类型的映射 ( Map>,Class>>)

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:02:48 25 4
gpt4 key购买 nike

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

对于背景:

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

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

public abstract class classB<T> {
public abstract void consoumeResource(T resource);
}

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

最佳答案

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

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

}

现在,一个 CompatibleHashMap<String>只让你放ClassA<String>作为键和 ClassB<String>作为值(value)观。

编辑:

正如您在评论中提到的,通过这种方式您将自己绑定(bind)到 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>>());

这样,您就不会绑定(bind)到特定的 Map实现,如果 map 的泛型类型,编译器将抛出错误, ClassAClassB不一样。

关于Java:声明具有两个相关泛型类型的映射 (<T> Map<Class<? extends ClassA<T>>,Class<? extends ClassB<T>>>),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14476987/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com