66

以下の例のように、多くのメソッドを持ついくつかのインターフェイスを実装する基本クラスを作成する必要があります。

重複したメソッドの大群を作成することなく、これらのメソッド呼び出しを委任する簡単な方法はありますか?

public class MultipleInterfaces implements InterFaceOne, InterFaceTwo {

    private InterFaceOne if1;
    private InterFaceTwo if2;

    public MultipleInterfaces() {
      if1 = new ImplementingClassOne();
      if2 = new ImplementingClassTwo();
    }

    @Override
    public void classOneMethodOne { if1.methodOne(); }
    @Override
    public void classOneMethodTwo { if1.methodTwo(); }
    /** Etc. */


    @Override
    public void classTwoMethodOne { if2.methodOne(); }
    @Override
    public void classTwoMethodTwo { if2.methodTwo(); }
    /** Etc. */

}
4

4 に答える 4

79

おっしゃるとおり、仕方がありません。ただし、少しまともな IDE では、デリゲート メソッドを自動生成できます。たとえば、Eclipse で実行できます。最初にテンプレートをセットアップします。

public class MultipleInterfaces implements InterFaceOne, InterFaceTwo {
    private InterFaceOne if1;
    private InterFaceTwo if2;
}

次に右クリックし、[ソース] > [デリゲート メソッドの生成if1] を選択し、フィールドとフィールドの両方にチェックを入れて [ OKif2 ] をクリックします。

次の画面も参照してください。

代替テキスト


代替テキスト


代替テキスト

于 2010-12-28T14:47:44.023 に答える
7

複数のインターフェースを実装する方法は 1 つあります。

あるインターフェースを別のインターフェースから拡張するか、事前定義されたインターフェースを拡張するインターフェースを作成するだけです。

public interface PlnRow_CallBack extends OnDateSetListener {
    public void Plan_Removed();
    public BaseDB getDB();
}

これで、out クラスで使用する別のインターフェイスを拡張するインターフェイスができました。2 つ以上のインターフェイスを実装するこの新しいインターフェイスを使用するだけです。

public class Calculator extends FragmentActivity implements PlnRow_CallBack {

    @Override
    public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {

    }

    @Override
    public void Plan_Removed() {

    }

    @Override
    public BaseDB getDB() {

    }
}

お役に立てれば

于 2014-05-22T06:44:56.977 に答える
5

残念だけど違う。

拡張メソッドの Java サポートを心待ちにしています

于 2010-12-28T14:40:08.467 に答える
0

きれいな方法はありません。ターゲットメソッドを持ち、他のすべてをそれらに委譲するハンドラーでプロキシを使用できる場合があります。もちろん、コンストラクターがないため、ファクトリを使用する必要があります。

于 2010-12-28T14:40:34.967 に答える