web-dev-qa-db-ja.com

Javaで複数のインターフェースを実装する-委任する方法はありますか?

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

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

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. */

}
65
Chuck Mosher

前述のように、方法はありません。ただし、少しまともなIDEはデリゲートメソッドを自動生成できます。たとえば、Eclipseでできます。最初にテンプレートをセットアップします。

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

次に、右クリックしてソース>デリゲートメソッドの生成を選択し、if1フィールドとif2フィールドの両方にチェックマークを付けて、OKをクリックします。

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

alt text


alt text


alt text

79
BalusC

複数のインターフェイスを実装する方法が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() {

    }
}

お役に立てれば

6
Jack Gajanan

残念だけど違う。

私たちは皆、 拡張メソッド のJavaサポートを待ち望んでいます

5
Lukas Eder

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

0
sblundy