AspectJ - Статическое объявление между типами в классах, реализующих данный интерфейс
Я хотел бы знать, возможно ли (и как, если это...) сделать статическое объявление между типами, которое работает на всех классах, которые реализуют данный интерфейс.
В моем случае у меня есть пустой интерфейс:
public interface Delegate {}
и два класса, реализующие это:
public class DelegateA implements Delegate {...}
public class DelegateB implements Delegate {...}
И я хочу, чтобы аспект объявлял статический член в DelegateA и DelegateB... и всех будущих классах, которые будут реализовывать мой интерфейс!
Как я должен это делать? Если это возможно только...
1 ответ
Вы уверены, что хотите это сделать? В любом случае, вот мое лучшее решение для вашей проблемы:
public aspect MyAspect pertypewithin(Delegate+){
public int oneFieldPerClass;
}
Это создаст экземпляр аспекта для каждого подтипа Delegate. Вы можете получить доступ к полю следующими способами:
MyAspect.aspectOf(DelegateA.class).oneFieldPerClass = 1;
MyAspect.aspectOf(DelegateB.class).oneFieldPerClass = 2;
Delegate d = new DelegateA();
MyAspect.aspectOf(d.getClass()).onFieldPerClass = 3;
Следующая ветка также может быть полезна:
AspectJ - Создание глобального поля Logger с использованием объявления между типами
HTH, дсп