Активные объекты @ Реализация рекурсии аннотаций
У меня проблема с библиотекой активных объектов ( 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();
}