首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Active objects @Implementation注释递归

Active objects @Implementation注释递归
EN

Stack Overflow用户
提问于 2013-09-19 07:48:54
回答 2查看 577关注 0票数 1

活动对象库( active objects library,https://java.net/projects/activeobjects/pages/Home)出现了问题。

假设我有这样的ao实体:

代码语言:javascript
运行
复制
@Implementation(PersonImpl.class)
interface Person extends Entity{

    public String getName();

    public String setName();
}

以及该实体的实现类:

代码语言:javascript
运行
复制
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类中)并从数据库中获取名称?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-19 09:32:23

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

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

票数 1
EN

Stack Overflow用户

发布于 2013-09-19 08:29:28

代码语言:javascript
运行
复制
private String getMyName(boolean isMonday) {
  if (isMonday) {
    return "I hate Monday";
  }
  return person.getName();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18888995

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档