Итак, я создал несколько пользовательских аннотаций:
@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)) {
...
}
}
Как этого добиться?