2012-08-17 12 views
18

ロギングなどの追加には、いくつかのプロキシを作成する必要があります。このようなものがあります:Eclipseでラッパーを自動生成する方法はありますか?

interface IMath { 
    public int add(a, b); 
} 

class Math implements IMath { 
    public int add(a, b) { return a + b; } 
} 

class MathWithLogs implements IMath { 
    private IMath realMath; 
    public int add(a, b) { 
     Log.d("tag", "valueable info"); 
     return realMath.add(a, b); 
    } 
} 

これらのインターフェイスが20の方法でない限り、すべてが問題なく、1つだけに何かを追加する必要があります。

私の質問は、Eclipse用のプラグインでラッパークラスを自動生成する方法はありますか?

他に明記されていない限り(@Overrideなど)、realMathからメソッドを呼び出すためのアノテーションを使用する方法がありますか?

+1

また、AspectJ(または一般的にはAOP)とJavaの標準的なプロキシメカニズムを見たいと思うかもしれません。これらは、新しいクラスを書くことを必要とせずに上記のユースケースを優雅に処理します。 – Romain

答えて

26

右任意のソースファイル(.javaファイル)をクリックして、あなたの即時のインターフェイスのすべてのメソッドの本体を貼り付けますsource -> Override/Implement Methods/Generate Delegate Methods.

最初に移動します。 2番目のオブジェクトは、オブジェクトまでのすべての階層に対して同じ処理を行います(わからないと思います)。 これが役立つことを願っています。

+0

どちらもObjectまでのすべての階層をサポートしています。デリゲートをサポートするのはデリゲートだけです。これは通常、ラッパークラスで必要なものです。そのためには、ソースファイルのどこかを右クリックするだけでは、委任したいフィールドを右クリックしなければなりません。 – Kidburla

9

はい、 "Generate Delegate Methods"という名前のソースジェネレータがあります。

5

他の回答を読んだ後、しばらく時間がかかりました。解決方法は次のとおりです。

  1. 必要なインターフェイスを実装する(最初は空の)ラッパークラスを作成します。クラスを作成するときは、「継承した抽象メソッド」のチェックを外してください。
  2. 新しいラッパークラス(インターフェイスの実装が不足しているため、現時点ではエラーが表示されます)に、必要なインターフェイスと同じ型のフィールドを作成します。
  3. 作成したばかりのフィールドを右クリックし、[ソース] - [代理人メソッドを生成]を選択します。
  4. 作成するメソッドを確認し、[OK]をクリックします。
  5. 最後に、フィールドの単一引数のコンストラクタまたはセッタメソッドを追加します(このプロセスの一部として自動的に生成されません)。
関連する問題