除了添加注释之外,还有一种方法可以正确解决有关在return语句中将Boolean
转换为K
的警告吗?我正在实例化Foo<Boolean, Integer>
,因此当执行实例方法K
时,Integer
是foo()
,对吗?
public class Foo<K, V> {
public static void main(String[] args) {
(new Foo<Boolean, Integer>()).foo();
}
public K foo() {
return (K) Boolean.FALSE;
}
}
编辑:所以,正如所建议的那样,我最终重构了代码,现在一切都很精彩。
答案 0 :(得分:4)
通过将Boolean.FALSE
转换为K
,您实际上是在说K
应始终为Boolean
(或者您的代码会抛出异常)。那么为什么不将所有出现的K
更改为Boolean
,并从类定义中删除泛型类型参数?
public class Foo<V>
{
public Boolean foo()
{
return Boolean.FALSE;
}
}
如果你真的打算拥有Foo<K, V>
,那么你必须只包含适用于班级中任何K
(和任何V
)的方法。因此,我建议您删除foo()
并将其移至其他位置,以便知道Foo<K, V>
的特定实例始终为Boolean
K
。