Если аннотация связана с методом при объявлении его в интерфейсе, можем ли мы вызвать аннотацию в классе реализации? - PullRequest
5 голосов
/ 13 января 2010

Это касается использования аннотаций в Java. Я связал аннотацию с методом, объявив его в интерфейсе. При реализации, как я могу гарантировать, что аннотация передается вместе с аннотацией @Override, и если нет, она должна выдать ошибку компиляции?

Спасибо.

Ответы [ 2 ]

1 голос
/ 13 января 2010

Вы не можете.

Вам нужно написать некоторый код для этого (либо во время загрузки приложения, либо с использованием apt )

У меня был такой же сценарий, и я создал собственную аннотацию:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface DependsOn {
    Class<? extends Annotation>[] value();

    /**
     * Specifies whether all dependencies are required (default),
     * or any one of them suffices
     */
    boolean all() default true;
}

и применил его к другим аннотациям, например:

@Retention(value = RetentionPolicy.RUNTIME)
@Target(value = ElementType.TYPE)
@DependsOn(value={Override.class})
public @interface CustomAnnotation {
}

Важно: иметь в виду, что @Override имеет политику хранения во время компиляции (SOURCE), то есть она недоступна во время выполнения.

1 голос
/ 13 января 2010

Вы не можете применить это в компиляторе, нет. Это работа инструментов, которые используют эти аннотации для проверки всех суперклассов и интерфейсов при поиске аннотаций для данного класса.

Например, AnnotationsUtils в Spring принимает класс для проверки аннотаций и просматривает их по всему дереву наследования в поисках, потому что компилятор и JVM не делают этого за вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...