为什么泛型类型不会传播到所有类方法?

时间:2014-02-17 19:07:00

标签: java generics

除了添加注释之外,还有一种方法可以正确解决有关在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;
    }
}

编辑:所以,正如所建议的那样,我最终重构了代码,现在一切都很精彩。

1 个答案:

答案 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