Если аннотация связана с методом при объявлении этого в интерфейсе, мы можем вызвать присутствие аннотации в классе реализации?

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

Спасибо.

5
задан Vikdor 13 January 2010 в 10:41
поделиться

2 ответа

Ты не можешь.

Для этого нужно написать код (либо на время загрузки приложения, либо с помощью 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 {
}

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

1
ответ дан 15 December 2019 в 06:27
поделиться

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

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

2
ответ дан 15 December 2019 в 06:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: