首页 > 解决方案 > Java用内部类类型扩展类

问题描述

我有以下示例代码,并在最后一行产生“类型参数不在其范围内”错误。C/D 类通过继承重用了 A/B 中的大量代码。我如何将 Y 类定义为没有错误并且仍然使用 D 类作为类型参数?有没有一种方法可以定义 D 类以使用 AB,但仍然具有 D 扩展 S 用于 Y 类的签名?

public abstract class S<E extends S<E>> extends somethingElse {}
public abstract class R<E extends S<E>> {}

public class A extends Z {
  public class B extends S<B> {
  }
}

public class C extends A {
  public class D extends A.B {
  }
}

public class X extends R<B> {}  // OK
public class Y extends R<D> {}  // Error: Type parameter D is not within its bound; should extends S<D>

任何帮助,将不胜感激。

标签: javainheritanceinner-classestype-parameter

解决方案


要编译它,您可以更改E extends S<E>E extends S<? super E>

public abstract class R<E extends S<? super E>> {}

这个问题的原因类似于我今天早些时候回答的另一个问题。

没有有界通配符,D正在扩展S<B>而不是S<D>.


推荐阅读