活动对象@Implementation注释递归

时间:2013-09-19 07:48:54

标签: java active-objects

我遇到活动对象库(https://java.net/projects/activeobjects/pages/Home)的问题。

假设我有这样的实体:

@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类中)并从数据库中获取名称?

2 个答案:

答案 0 :(得分:1)

根据http://www.javalobby.org/articles/activeobjects/,ActiveObjects通过检查调用堆栈自动避免了这个问题:

“我们可以使用它来检查堆栈上一步的定义实现。如果我们发现它启动了方法调用,我们将跳过重新调用已定义的实现并实际执行方法调用因此,从定义的实现中对实体的任何调用都将跳过任何实现逻辑,从而避免递归。“

答案 1 :(得分:0)

private String getMyName(boolean isMonday) {
  if (isMonday) {
    return "I hate Monday";
  }
  return person.getName();
}