0

サブクラスに問題があり、関数の「メソッド」をジェネリックにしようとしています。以下を参照してください。タイプ B1 と B2 のオブジェクトをそれぞれ使用するためにクラス C1 と C2 を実装する際に問題があります。

編集: 明確でない場合は申し訳ありませんが、基本的に関数メソッドをオーバーライドしようとしていますが、パラメーターをジェネリックにする必要があるため、C のサブクラスであるクラス C1 では B1 をパラメーターとして使用し、C2 ではパラメーターとして使用する必要があります。は C1 のサブクラスであり、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)
  {

  }
}
4

2 に答える 2

0

ちょっと面倒ですが、次のようにする必要があると思います。

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)
  {

  }
}
于 2012-10-29T06:30:25.060 に答える
0

C1< E >延長できない理由はありますC< E >か?以下は、サンプルを適切に編集してコンパイルします。

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) {}
}
于 2012-10-29T07:08:46.350 に答える