3

3つのインターフェースを1つ(ICountable)にカプセル化し、具象クラスにこのカプセル化インターフェースを実装させようとしています。`ICountableコード:

public interface ICountable extends IAddable, Cloneable, Serializable {}

Addableインターフェイスの定義は次のとおりです。

public interface IAddable<T> {
    T add(T other);
}

ICountable具象クラス( )に実装しようとするとBaseCounter、すべてのメソッドが実装されていないというエラーが表示されます(メソッドに不平を言うadd)。理由がわかりません。コードは次のBaseCounterとおりです。

public class BaseCounter implements ICountable {
    @Override
    public BaseCounter add(BaseCounter other) {
        // TODO Auto-generated method stub
        return null;
    }
}

addメソッドシグネチャをに変更します

public ICountable add(ICountable other) 

状況を修正します。しかし、私が最初に望んでいたのは、他の3つを拡張する1つのインターフェイス( )を作成することでした(2つのマーカーと1つのインターフェイスは、同じタイプのオブジェクトでICountable実行する実装クラスの機能を記述します)。メソッドの実装をadd次のようにするために変更する必要があるもの:addBaseCounter

public BaseCounter add(BaseCounter other)

私はあなたの提案をいただければ幸いです。

4

2 に答える 2

7

1ICountableにジェネリックを追加します

public interface ICountable<T> extends IAddable<T>, Cloneable, Serializable {}

2実装でジェネリックを指定します

public class BaseCounter implements ICountable<BaseCounter> {
    @Override
    public BaseCounter add(BaseCounter other) {
        // TODO Auto-generated method stub
        return null;
    }
}
于 2012-06-01T06:17:07.827 に答える
3

コードをコンパイルせずに、インターフェイスに汎用型を追加する必要があると思います。型がインターフェースに渡されない場合、メソッドはどのreturn-typeを与えるかを知る方法がありません(もちろん、あなたが言及したICountableを除いて)。例

public interface IAddable<T> { 
    T add(T other);
}

public interface ICountable<T> extends IAddable<T>, ... {
    ....
}

public class BaseCounter implements IAddable<T> {
    @Override public BaseCounter add(BaseCounter other) { ... }
}

これで問題が解決するはずです。

于 2012-06-01T06:18:21.827 に答える