java泛型继承

java泛型继承,java,generics,inheritance,overriding,Java,Generics,Inheritance,Overriding,我的子类有问题,并试图使我的函数“方法”泛型,请参见下文,我在实现类C1和C2以分别使用B1和B2类型的对象时遇到问题 编辑:如果不清楚,很抱歉,基本上我试图重写函数方法,但我需要参数是泛型的,因此对于C的子类C1,它应该使用B1作为参数,对于C1的子类C2,它应该使用B2作为参数 代码是我希望实现的行为,但我正在努力使其可编译 这是我的课 class A{} class T1{} class V1{} abstract class B<T extends T1, V extends V1

我的子类有问题,并试图使我的函数“方法”泛型,请参见下文,我在实现类C1和C2以分别使用B1和B2类型的对象时遇到问题

编辑:如果不清楚,很抱歉,基本上我试图重写函数方法,但我需要参数是泛型的,因此对于C的子类C1,它应该使用B1作为参数,对于C1的子类C2,它应该使用B2作为参数

代码是我希望实现的行为,但我正在努力使其可编译

这是我的课

class A{}
class T1{}
class V1{}
abstract class B<T extends T1, V extends V1>{}
class B1 extends B<SomeChildOfT1, SomeChildOfV1>{}
class B2 extends B1{}

abstract class C <E extends B<? extends T1, ? extends T2>> extends A
{
    void method(E)
      {//bla}
}

class C1<E extends B1> extends C<B1>
{
   //method with object B1 as parameter
   @override
   void method(E){
    //bla
    } 
}

class C2 extends C2<B2>
{
    @override
  void method(B2)
  {

  }
}
class A{}
类T1{}
类V1{}
抽象类B{}
类B1扩展了B{}
类B2扩展了B1{}

抽象类C虽然有点凌乱,但我认为你应该这样做:

class A{}
class T1{}
class V1{}
abstract class B<T extends T1, V extends V1>{}
class B1 extends B<SomeChildOfT1, SomeChildOfV1>{}
class B2 extends B1{}

abstract class C <T extends T1, V extends V1, E extends B<T, V>> extends A
{
    void method(E)
      {//bla}
}

class C1<E extends B1> extends C<SomeChildOfT1, SomeChildOfV1, E>
{
   //method with object B1 as parameter
   @override
   void method(E){
    //bla
    } 
}

class C2 extends C1<B2>
{
    @override
  void method(B2)
  {

  }
}
class A{}
类T1{}
类V1{}
抽象类B{}
类B1扩展了B{}
类B2扩展了B1{}
抽象类C扩展了
{
无效法(E)
{//bla}
}
类别C1延伸至类别C
{
//以对象B1为参数的方法
@凌驾
无效法(E){
//布拉
} 
}
C2类扩展到C1类
{
@凌驾
孔隙法(B2)
{
}
}

您有什么理由不能进行
C1
扩展
C
?以下内容为我编译,并对您的示例进行了适当的编辑:

class A{}
class T1{}
class SomeChildOfT1 extends T1 {}
class V1{}
class SomeChildOfV1 extends V1 {}
abstract class B<T extends T1, V extends V1>{}
class B1 extends B<SomeChildOfT1, SomeChildOfV1>{}
class B2 extends B1{}

abstract class C <E extends B<? extends T1, ? extends V1>> extends A {
    void method(E e) {}
}

class C1<E extends B1> extends C<E> {
    @Override void method(E e) {}
}

class C2 extends C1<B2> {
    @Override void method(B2 b2) {}
}
class A{}
类T1{}
类SomeChildOfT1扩展T1{}
类V1{}
类SomeChildOfV1扩展了V1{}
抽象类B{}
类B1扩展了B{}
类B2扩展了B1{}

抽象类C您的解决方案有什么问题?调用堆栈、错误消息?您的问题可以更好地呈现。充其量,这段代码甚至不会编译。至少提及您试图实现的目标总是好的。我不能使用B2类型的对象作为我在C2类中重写的方法的参数。它使用B1作为参数,这不是我需要的,因为我在方法中使用了B2类型的对象。在
抽象类B{}
T1
V1
是什么?它能不能是抽象类B{}
?试过这个,结果和我的一样。为C1生成覆盖方法时,参数设置为B1。然后,当您为C2生成覆盖时,它使用B1作为参数,而不是在C1的声明中稍微改变了一点的B2(这是我试图实现的)。虽然我不确定它是否有效,但前一个显然是不正确的。我曾在ideone中尝试过这一点,我建议的方法是编译的。你可以调查一下。老实说,我觉得你的例子太复杂了。。。