22

たとえば、ロギングを追加するために、いくつかのプロキシを作成する必要があります。そんな感じ:

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からメソッドを呼び出す方法がありますか?

4

3 に答える 3

30

任意のソースファイル(.java)を右クリックして、に移動しますsource -> Override/Implement Methods/Generate Delegate Methods.

1つ目は、直接インターフェースのすべてのメソッドの本体を貼り付けます。2つ目は、Objectまでのすべての階層に対して同じことを行います(私は推測しますが、わかりません)。お役に立てれば。

于 2012-08-17T10:29:53.327 に答える
11

はい、「GenerateDelegateMethods」と呼ばれるソースジェネレーターがあります。これはあなたが望むことを正確に実行します。

于 2012-08-17T10:22:32.937 に答える
9

他の答えを読んだ後、正確に何をすべきかを理解するのに少し時間がかかりました。解決策は次のとおりです。

  1. 必要なインターフェースを実装する(最初は空の)ラッパークラスを作成します。クラスを作成するときは、必ず「継承された抽象メソッド」のチェックを外してください。
  2. 新しいラッパークラス(インターフェイスの実装がないため、現時点ではエラーが表示されます)内に、必要なインターフェイスと同じタイプのフィールドを作成します。
  3. 作成したフィールドを右クリックして、[ソース]->[デリゲートメソッドの生成]を選択します。
  4. 作成するメソッドをチェックして、[OK]をクリックします。
  5. 最後に、フィールドに単一引数のコンストラクターまたはセッターメソッドを追加します(このプロセスの一部として自動的に生成されるわけではありません)。
于 2015-05-19T21:19:17.200 に答える