2016-12-11 3 views
-2

Как инструмент javac обрабатывает аннотации в исходном коде? Скомпилированы ли они и переведены на bytecode или они будут обрабатываться таким образом, который напоминает обработку строк комментариев ?Как инструмент javac обрабатывает аннотации

+0

Определите, что вы подразумеваете под «процессом»? Вы говорите о [** компиляции обработки аннотации времени **] (http://hannesdorfmann.com/annotation-processing/annotationprocessing101)? –

+0

Да, я имею в виду компиляцию времени аннотации обработки. –

ответ

1

Аннотации обрабатываются компилятором особым образом. Они анализируются, но большинство аннотаций ничего не значит для компилятора. Некоторые из них, например, если вы неправильно используете аннотацию @Override, произойдет ошибка времени компиляции. Вы можете найти список комментариев к компилятору here.

После этого, поведение зависит от типа аннотаций:
Если аннотация имеет rentention policy набор для RUNTIME или CLASS, он фактически будет включен в файле класс. Если политика хранения равна RUNTIME, аннотация может быть доступна даже во время выполнения через отражение. Многие библиотеки используют это, чтобы обеспечить некоторый дополнительный комфорт, например. JUnit использует @Test для обозначения методов, которые реализуют модульные тесты и ищет их во время выполнения.

Кроме того, java-компилятор позволяет реализовать так называемые «обработчики аннотации», которые могут получить доступ к AST модуля компиляции и обработать аннотации. Это еще одно доказательство того, что компилятор действительно обрабатывает аннотации.

Смежные вопросы