1

私はJavaを学んでおり、(ArrayListを使用して)ADTを実践するために教師が定義したインターフェースを実装するプログラムを作成する必要があります。理解できないエラーが発生しました。新しい説明が役立つかもしれません。

インターフェース :

public interface A<T extends C> { ... }

エラーのあるクラス署名:

public class AImpl<T> implements A<T> { /*Bound mismatch error*/ ... }

JUnitテストクラス

//Declaration
A<Alphabet> alphaList;

//in setUp()
alphaList = new AImpl<Alphabet>;

// in one method
alphaList.size();  /* The method size() is undefined for the type A<Alphabet> */

アルファベットも先生から与えられ、署名があることに注意してください:

public class Alphabet implements C { ... }

誰かが私のエラーがどこにあるのかを説明して指摘するのを手伝ってもらえますか?

よろしく。

4

2 に答える 2

5

ここでの問題は、インターフェイス(T)のTypeがCを拡張するようにバインドされているため、Cから継承する必要があると言っていることです。実装を提供するクラスでは、パラメーターTのTypeに境界を指定しません。これの鍵は、最初の例のTが2番目の例のTと同じではないため、境界を再度指定する必要があることです。次のコードは、境界の問題に関する問題を解決するはずです。

インターフェース:

public interface A<T extends C> { ... }

含意:

public class AImpl<T extends C> implements A<T> { /*Bound mismatch error*/ ... }
于 2013-02-24T15:32:33.787 に答える
2

この問題を回避するAImplには、ジェネリック型が拡張されることを保証して宣言しますC

public class AImpl<T extends C> implements A<T> { }
于 2013-02-24T15:36:01.910 に答える