0

save()注釈で注釈が付けられた任意の型にメソッドを導入する必要があり@Persistentます。Person personSaved = person.save()このメソッドは、単にオブジェクトを基礎となるデータベースに保存し、オブジェクトのコピーをその行 ID (例: )とともに返します。

この目的のために、指定されたアスペクトを AspectJ を使用して記述しました (PersistentObjectはインターフェイス提供save()メソッドです)。

public aspect PersistencyAspect {
    declare parents: (@Persistent *) implements PersistentObject;

    public PersistentObject PersistentObject.save() {
        // perform the save operation and return a copy of this
    }
}

上記のコードは良さそうです。しかし、私の問題はsave()メソッドの戻り値の型です。@Persistentの代わりに (例: Person)で注釈が付けられた実際の型として宣言したいと思いPersistentObjectます。

私の問題の解決策はありますか? 前もって感謝します。

4

1 に答える 1

1

私はあなたが何を望んでいるのか理解しています。技術的な答えは単純です: いいえ。

OTOH、これは大きな損失ではないと思います。とにかく、あなたが望むものは良いアプリケーション設計ではないようです:

  • save()ゲッターではないため、直感に反するようなオブジェクトを返したいとします。すでに持っているオブジェクトを返す必要があるのはなぜですか? 戻り値の型save()があると思います。void
  • 特定のクラスに対してよりも、インターフェイスに対して開発する方がはるかにクリーンで優れているとは言えませんか? 何かを返す場合、インターフェイスの種類はそれほど悪い選択ではないと思います。
于 2013-03-23T12:55:16.017 に答える