2010-12-28 6 views
63

以下の例のように、いくつかのインターフェイスを実装する基本クラスを作成する必要があります。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. */ 

} 

答えて

74

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

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

が、その後ソースを選択し、右クリック>デリゲートメソッドを生成し、両方if1if2フィールドをチェックし、OKをクリックします。

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

alt text


alt text


alt text

+8

感謝を助け、役に立つ答え。私のプロジェクトはEclipseに基づいているので、私はBalusCの答えをほぼリアルタイムで使用することができました!魅力のように働いて、何時間もの欲求不満の仕事を救った。このフォーラムの新しいユーザーとして、私はここで参加者の質に驚いて喜んでいます。 –

+1

ようこそ。 – BalusC

+6

素晴らしいヒント!私はそれを知らなかったし、将来の100時間を節約します:) Stackoverflowについての良いことは:あなたはあなた自身も尋ねなかった質問から学ぶでしょう! –

0

のためのJavaサポートを待っているにはかなり方法はありません。ターゲットメソッドを持つハンドラでプロキシを使用し、その他すべてを委譲することができます。もちろん、コンストラクタが存在しないため、ファクトリを使用する必要があります。

3

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

はちょうど別の1つのインターフェイスを拡張するか、事前に定義されたインタフェース 例を拡張するインタフェースを作成します。

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

今、私たちは、ちょうど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() { 

    } 
} 

希望これは、このような迅速なためBalusCとルーカスへ

関連する問題