gpt4 book ai didi

java - 泛型 - 定义 Map, MyClassB> 确保两者 ?是相同的?

转载 作者:行者123 更新时间:2023-11-30 10:00:13 26 4
gpt4 key购买 nike

我有一行代码:

private final Map<MyClassA<?>, MyClassB<?>> myMap = new HashMap<>();

有没有什么方法可以以告诉编译器的方式定义该映射?在每种情况下都必须是同一类?

是这样的吗?

private final <T> Map<MyClassA<T>, MyClassB<T>> myMap = new HashMap<>();

...这不是合法的语法?

目前只是一道自学题。

FWIW,我想添加一个方法

public <T> MyClassB<T> getForA(MyClassA<T> a) {
return this.myMap.get(a);
}

但是除非我可以定义 myMap 来坚持键和值都包装相同的类型,否则我会遇到编译错误。

最佳答案

正如您已经知道的那样,如果不同条目的键和值不同,则无法执行此操作:

map.put(new MyClassA<Foo>(), new MyClassB<Foo>());
map.put(new MyClassA<Bar>(), new MyClassB<Bar>());

(我从 your comment 中获取了这个要求)

你可以做的是编写一些辅助方法来强制执行此约束:

public <T> void put(MyClassA<T> key, MyClass<B> value) {
// Maybe check at runtime if the constraint is not validated?
map.put(key, value);
}

public <T> MyClassB<T> get(MyClassA<T> key) {
// This will produce an unchecked warning.
return (T) map.get(key);
}

只要您仅通过此类辅助方法访问 map (并且不使用原始类型),就不会违反 map 上的约束,这使您可以编写类型安全的代码。

唯一不是类型安全的部分是那些辅助方法,这是您必须小心的地方。

关于java - 泛型 - 定义 Map<MyClassA<?>, MyClassB<?>> 确保两者 ?是相同的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58225226/

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