gpt4 book ai didi

java - 返回多个泛型类时未经检查的转换

转载 作者:行者123 更新时间:2023-11-30 05:53:38 24 4
gpt4 key购买 nike

在我的代码中,我需要保留一个对的集合,它们都是持有相同通用返回值的通用类型类(GenericTypeA<T>GenericTypeB<T>,其中每对中的T总是相同的)像这样:

private HashMap<GenericTypeA<T>, GenericTypeB<T>> myMap;

当然,我无法像这样声明 map ,因为它对某些对使用不同的 T,所以我使用了:

private HashMap<GenericTypeA, GenericTypeB> myMap;

给定一个对象 GenericTypeA<T> ,我的代码应该在 GenericTypeB<T> 上使用 T 执行方法

public <T> void foo(GenericTypeA<T> key, T t){
GenericTypeB<T> value = myMap.get(key);
value.goo(t);
}

我得到unchecked assignment排队警告GenericTypeB<T> toResolve = myMap.get(key); ,将值转换为 GenericTypeB<T>也不行。值必须为 GenericTypeB<T>因为它是goo()接收方法(T t)作为参数。

有什么方法可以在不抑制警告的情况下改进我的代码?

(使用java,Intellij ide)

最佳答案

where the T will always be the same in each pair

Java 的类型系统的表达能力不足以让编译器知道这一点,因此您必须自己管理这个事实。

只要您在代码中正确执行此约束,此处未经检查的强制转换就不会出现任何问题。

Any way i can improve my code without suppressing warnings?

没有;抑制警告本身并不存在问题,只要您完全理解为什么会出现警告

遵循Effective Java的建议,并评论抑制以记录为什么它是安全的,例如:

@SuppressWarnings("unchecked")  // Safe because I make sure the Ts of key and value match.
GenericTypeB<T> value = (GenericTypeB<T>) myMap.get(key);
<小时/>

请注意,您不需要在代码中进行显式转换,因为您使用的是原始类型。不要:使用通配符绑定(bind)来代替:

private HashMap<GenericTypeA<?>, GenericTypeB<?>> myMap;

关于java - 返回多个泛型类时未经检查的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53517967/

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