Мне интересно, могу ли я использовать пользовательскую аннотацию для вызова некоторого метода сразу после аннотированного. Например, у меня есть класс, который содержит некоторые параметры, которые также могут уведомлять объекты, которые что-то изменилось (например, пользователь изменил что-то на панели настроек). Не все слушатели интересуются всеми типами событий, поэтому MyEvent
- это перечисление. Теперь у меня есть структура, как это:Могу ли я использовать аннотацию для вызова метода после аннотированного?
class Settings
{
private ArrayList<Listeners> listeners;
private void notifyListeners(MyEvent e)
{
// notify all listeners that something was changed
}
public void setSomeOption(int value)
{
// validate parameter, store it etc.
notifyListeners(MyEvent.SOME_INTEGER_SETTING_CHANGED);
}
}
Конечно объект прослушивания должен проверить тип события и игнорировать его или выполнять какие-то действия, но это не тот случай.
Я интересно, если я могу добиться этого с аннотациями, как этот
@NotifyAnnotation(MyEvent.SOME_INTEGER_SETTING_CHANGED)
public void setSomeOption(int value)
{
// validate parameter, store it etc.
// NO NEED TO CALL NOTIFY HERE - WILL BE HANDLED BY ANNOTATION
}
В JUnit, например, мы имеем @Before
или @After
аннотаций, и мне интересно, если JUnit имеет собственные аннотации анализатор, который обрабатывает метод аннотированным таким образом, или подобное поведение может быть сделано проще, поскольку аннотации могут быть @Retention(value=RUNTIME)
.
Я знаю, что в этом примере это может выглядеть чрезмерно сложным, и вызов notifyListeners()
очень симпатичен, но я не знаю, можно ли использовать аннотацию так, как я описал, и если да, могу ли я получить несколько советов? Я не ожидаю готового решения, просто намек, если это возможно, и что я должен принять во внимание.
Этот (вид) звучит как использование аспектов. Это то, о чем вы говорите? – Stultuske
@Stultuske Я не очень разбираюсь в аспектах, я только о них читаю в весенней документации. – Kuba
Вы можете настроить «каждый метод с именем, как xxx, будет превзойден - сразу после него следует функциональность X». Все зависит от того, как вы его настраиваете. – Stultuske