Активные объекты @ Реализация рекурсии аннотаций

У меня проблема с библиотекой активных объектов ( 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 ответа

Решение

Согласно http://www.javalobby.org/articles/activeobjects/, ActiveObjects автоматически избегает этой проблемы, исследуя стек вызовов:

"Мы можем использовать это для проверки определенной реализации на один шаг вверх по стеку. Если мы обнаружим, что она инициировала вызов метода, мы пропустим повторный вызов определенной реализации и фактически выполним вызов метода нормально. Таким образом, любые вызовы объекта из его определенной реализации будут пропускать любую логику реализации, избегая рекурсии."

private String getMyName(boolean isMonday) {
  if (isMonday) {
    return "I hate Monday";
  }
  return person.getName();
}
Другие вопросы по тегам