当我试图专门化一个实现泛型接口的类时遇到了一个问题,我想从与超类相同的接口继承,但具有更具体的类型参数。以下代码段显示了一个无法编译的合成但完整的示例。注释包含来自 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>
是否有解决此限制的标准方法,例如解决相同问题而不需要这种继承的模式?