Итак, я создал несколько пользовательских аннотаций:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Foo {
}
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Bar {
}
Эти аннотации используются в моих функциях:
public class Worker {
@Foo
public void doTaskOne() {...}
@Bar
public void doTaskX() {...}
...
}
Я хочу использовать отражение java, чтобы проверить, объявлена ли определенная аннотация в одном методе.
for (Method m : methods) {
if (m.isAnnotationPresent(Foo.class)) {
...
} else if (m.isAnnotationPresent(Bar.class)) {
...
}
}
Проблема в том, что, поскольку в Java пользовательская аннотация @interface
не может быть расширена. Я имею в виду, что это незаконно:
public @interface Bar extends MyBaseAnnotation{
}
Это я не могу иметь базу @interface
для всех моих пользовательских классов аннотаций Foo
и Bar
. Итак, если у меня создана новая пользовательская аннотация, мне нужно добавить больше условий else if
в приведенный выше код проверки метода, что отстой! Можно ли как-то избавиться от этой проблемы? Чего я хочу добиться, так это обобщить мой код проверки метода на:
for (Method m : methods) {
if (m.isAnnotationPresent(MyBaseAnnotation.class)) {
...
}
}
Как этого достичь?