这是我当前的java类结构

Abstract TopClass <T extends Foo>
    display(T)

BottomSubClass extends TopClass <MyFoo>
     void display(MyFoo)
     {
         // display something
     }


…其中MyFoo扩展了Foo

这可以正常工作,但是现在我想在TopClassBottomSubClass之间引入一个称为IntermediateSubClass的抽象中间子类。

 Abstract TopClass <T extends Foo>
    display(T)

 Abstract IntermediateSubClass<T extends Foo> extends TopClass

 BottomSubClass extends IntermediateSubClass<MyFoo>
     void display(MyFoo)
     {
         // display something
     }


我现在在BottomSubClass中遇到编译错误,指示已覆盖
方法void display(MyFoo)需要在超类中声明。
实现方法void display(Foo)时也会出错。

为什么通用的类参数不传播到类层次结构中-我的IntermediateSubClass语法有问题吗?

我希望BottomSubClass可以编译。

最佳答案

以下通过编译:

abstract class TopClass <T extends Foo> {
  abstract void display(T t);
}

abstract class IntermediateSubClass<T extends Foo> extends TopClass<T> {

}

class BottomSubClass extends IntermediateSubClass<MyFoo>
{
  void display(MyFoo t)
  {
    // display something
  }
}


您的问题是IntermediateSubClass的定义,它扩展了原始的TopClass而不是TopClass<T>

10-07 13:20
查看更多