当我试图专门化一个实现泛型接口的类时遇到了一个问题,我想从与超类相同的接口继承,但具有更具体的类型参数。以下代码段显示了一个无法编译的合成但完整的示例。注释包含来自 Java 编译器的错误消息。
interface Producer<T> {
T get();
}
class NumberProducer implements Producer<Number> {
@Override
public Number get() { return null; }
}
// Producer cannot be inherited with different arguments: <java.lang.Integer> and <java.lang.Number>
class IntegerProducer extends NumberProducer implements Producer<Integer> {
@Override
public Integer get() { return null; }
}
在PECS的意义上,Producer<T>
是生产者,所以Producer<Integer>
是的子类型Producer<Number>
,但是没有办法在 的定义中声明它Producer<T>
。Java 不允许IntegerProducer
同时继承自NumberProducer
和Producer<Integer>
同时继承自并同时IntegerProducer
继承。Producer<Integer>
Producer<Number>
是否有解决此限制的标准方法,例如解决相同问题而不需要这种继承的模式?