3

私が置く場合:

public CountryState CountryState.find(long id) {
        return (CountryState) findById(CountryState.class, id);
}

CountryStateクラスでfindメソッドを作成しています。

複数のクラスでメソッドを作成する方法はありますか?作成するクラスごとにコードを繰り返す必要がありますか?

アスペクトを使用すると、クラスを別のクラスから継承できることを知っていますが、Javaは多重継承を受け入れないため、これを行うと1つのスーパークラスを作成できます。

4

2 に答える 2

5

この「パターン」は、AspectJでそれを行う方法です。

インターフェイスを宣言します。

interface Holder {}

インターフェイスでタイプ間宣言を行います。

public int Holder.getMeAnInt() {
  return 42;
}

インターフェイスでそのような宣言を行うと、「デフォルトの実装」が提供されます。したがって、インターフェイスはgetMeAnInt()を定義し、getMeAnInt()を実装しないHolderの実装はデフォルトの実装を取得します。

パズルの最後のピースは、親の宣言を使用して、インターフェイスを実装するタイプのグループを指定することです。

declare parents: @Anno * implements Holder;

したがって、@ Annoで注釈が付けられたタイプはすべて、Holderを実装し、getMeAnInt()メソッドを持ちます。

于 2010-09-22T19:16:24.620 に答える
0

AOPを使わなくても実際に解決できます。あなたはただOOP/OODを使うことができます。2つの方法があります(メソッドを1回記述したいと思います)。

  1. メソッド実装を使用して抽象基本クラスを作成し、そこからすべてのクラスを派生させます。実際、これは最善のアイデアではありません。

  2. find()メソッドを実装し、クラス間で共有するヘルパークラスを作成します(依存性注入を使用するか、クラスを緊密に結合するだけです)。

したがって、私が正しく理解していれば、実際に必要なのは、ターゲットクラスのインスタンスを返すジェネリックメソッドです。

public <T> find(long id, T targetClassObject) {
  Class<? extends T> class = targetClassObject.getClass();
  // do something i.e. call target method via reflection
}
于 2010-09-17T20:56:41.510 に答える