Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
三层java泛型继承_Java_Generics - Fatal编程技术网

三层java泛型继承

三层java泛型继承,java,generics,Java,Generics,这是我当前的java类结构 Abstract TopClass <T extends Foo> display(T) BottomSubClass extends TopClass <MyFoo> void display(MyFoo) { // display something } 现在我在BottomSubClass中得到编译错误,表明 方法void display(MyFoo)需要在超类中声明。 实现方法

这是我当前的java类结构

Abstract TopClass <T extends Foo>
    display(T)

BottomSubClass extends TopClass <MyFoo>
     void display(MyFoo)
     {
         // display something
     }
现在我在
BottomSubClass
中得到编译错误,表明 方法
void display(MyFoo)
需要在超类中声明。 实现方法
voiddisplay(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
  }
}
抽象类TopClass{
抽象空洞显示(T);
}
抽象类中介子类扩展了TopClass{
}
类底部子类扩展了中间子类
{
无效显示(MyFoo t)
{
//展示
}
}

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

,这不应该是
IntermediateSubClass扩展了TopClass
?这并不一定能解决您的问题。请发布除您所询问的编译错误之外没有其他编译错误的代码。这对每个人来说都会容易得多。Thx.
扩展TopClass
而不使用任何泛型类型将禁用类型检查,并将使编译器混淆,至少在
TopClass
中会看到
T=Object
。这将导致后续错误,有时会造成相当混乱。因此,
扩展TopClass
应该可以解决您的问题。
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
  }
}