【问题标题】:Java extends class with inner class typeJava用内部类类型扩展类
【发布时间】:2019-09-18 00:49:05
【问题描述】:

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

任何帮助将不胜感激。

【问题讨论】:

    标签: java inheritance inner-classes type-parameter


    【解决方案1】:

    要编译它,您可以将E extends S&lt;E&gt; 更改为E extends S&lt;? super E&gt;

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

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

    如果没有有界通配符,D 将扩展 S&lt;B&gt; 而不是 S&lt;D&gt;

    【讨论】:

      猜你喜欢
      • 2013-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多