1

アクティブ オブジェクト ライブラリ ( https://java.net/projects/activeobjects/pages/Home ) に問題があります。

次のような ao エンティティがあるとします。

@Implementation(PersonImpl.class)
interface Person extends Entity{

    public String getName();

    public String setName();
}

そして、このエンティティの実装クラス:

class PersonImpl {

    private Person person;

    public PersonImpl(Person person){
        this.person = person;
    }

    public String getName(){
       if( isTodayIsMonday() )
           return "I hate monday";
       else
           return person.getName();
    }
}

問題はPersonImpl授業中です。無限再帰が発生するためですperson.getName()(implクラスは常に呼び出されます)。PersonImpl(クラス内で)実装の呼び出しをスキップして、データベースから名前を取得するにはどうすればよいですか?

4

2 に答える 2

1

http://www.javalobby.org/articles/activeobjects/によると、ActiveObjects はコール スタックを調べることで、この問題を自動的に回避します。

「これを使用して、定義済みの実装がスタックの 1 ステップ上にあるかどうかを確認できます。それがメソッド呼び出しを開始したことがわかった場合は、定義済みの実装の再呼び出しをスキップし、実際にメソッド呼び出しを正常に実行します。したがって、定義済みの実装からエンティティを呼び出すと、実装ロジックがスキップされ、再帰が回避されます。」

于 2013-09-19T09:32:23.663 に答える
0
private String getMyName(boolean isMonday) {
  if (isMonday) {
    return "I hate Monday";
  }
  return person.getName();
}
于 2013-09-19T08:29:28.413 に答える