Java время выполнения эквивалентно обработке аннотаций с помощью javax Processor / google @AutoService - PullRequest
0 голосов
/ 01 мая 2020

Я работал с обработкой аннотаций на уровне RetentionPolicy.SOURCE, используя javax.annotation.processing.Processor/AbstractProcessor и com.google.auto.service.@AutoService раньше, именно тогда я впервые обнаружил очень полезную RoundEnvironment.getElementsAnnotatedWith().

Теперь, в совершенно не связанном проекте Мне нужна та же функциональность, но во время выполнения. Другими словами, у меня есть Аннотация

@Target({ElementType.CONSTRUCTOR, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Mapper {
    Class<?> forUID() default Object.class;
}

, и я хочу получить каждый отдельный элемент (конечно, это могут быть только конструкторы или методы), аннотированный @Mapper. Могу ли я использовать RoundEnvironment во время выполнения? Если да, как мне получить его экземпляр? Если нет, есть ли время выполнения, эквивалентное этому? Заранее спасибо.

Использование:

  • JDK 11 (openjdk11)
  • Maven 3.6.3

1 Ответ

0 голосов
/ 03 мая 2020

Обработка аннотации - это инструмент только во время компиляции, сохранение аннотации просто говорит, будет ли аннотация доступна во время выполнения или только в источнике, для времени выполнения вы можете использовать отражение, но вы также можете использовать процессор аннотаций в время компиляции для генерации класса, в котором перечислены все типы с аннотацией c.

...