Java 使用内部 class 类型扩展 class

Java extends class with inner class type

我有以下示例代码并在最后一行产生了 "type parameter is not within its bound" 错误。 Class C/D 通过继承重用了 A/B 中的大量代码。我如何定义 class Y 没有错误并且仍然使用 class D 作为类型参数?有没有一种方法可以定义 class D 以使用 A.B 但仍然具有 D extends S for class 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>

如有任何帮助,我们将不胜感激。

要编译它,你可以将 E extends S<E> 更改为 E extends S<? super E>:

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

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

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