JavaRush /Java блог /Random /Аннотации. Часть первая, немного скучная
Сергеев Виктор
40 уровень

Аннотации. Часть первая, немного скучная

Статья из группы Random
Первая часть. Очень коротко написал про аннотации с типом SOURCE и CLASS. Стоит прочитать, чтобы не потеряться во второй части и что бы начать "непонимать" немного больше =) Здесь точно будет минимум одно слово, которое вы знаете!
Аннотации. Часть первая, немного скучная - 1
Первый раз я их видел в задачках тут и как-то не замечал. Ну, болтается Override, её же IDEA написала, значит так надо. Со временем я понял, что все намного глубже. Пока учишься, аннотации кажутся чем-то бесполезным, но необходимым. Ты не знаешь, зачем они, что делают. Вроде прочитал пару статей, там рассказали «как здорово, что теперь у нас есть аннотации, все стало так просто». Но я не знал, как было раньше, и не понимал, что теперь стало проще. Теперь знаю и хочу рассказать немного. Есть 3 типа аннотаций (RetentionPolicy):
  • SOURCE – аннотации для компилятора
  • CLASS – данные из аннотации будут записаны в байткод но недоступны во время работы. Пишут, что в стандартной библиотеке много аннотаций используют этот вид, и сейчас его держат из-за обратной совместимости. Применяется для очень специфичных задач.
  • Воспрос и ответ на StackOverflow
  • RUNTIME – самые популярны, используются во время работы кода.
Поскольку часть статьи заняло вступление, то я напишу тут про SOURCE и CLASS аннотации. Вот какие аннотация я смог найти (спасибо задачка 3607). Runtime я не пишу, их слишком много и не тема статьи. SOURCE:
  • java/lang/annotation/Native.class;
  • java/lang/SuppressWarnings.class
  • javax/annotation/Generated.class
  • ,java/lang/Override.class
CLASS: Я не знаю, зачем нужны аннотации с типом CLASS. Документацию на существующие аннотации найти не получилось, поэтому думаю можно просто оставить этот багаж позади. Но если найдете, поделитесь. SOURCE аннотации:
  1. Native – переменная под этой аннотацией может ссылаться на нативынй код;

  2. SuppressWarnings – подавляет различные предупреждения компилятора;

  3. Generated – маркирует исходных код, который был сгенерирован;

  4. Override – проверяет переопределение метода.
Поподробнее:
Аннотации. Часть первая, немного скучная - 2
Native — никогда не видел и никогда не пользовался. Думаю довольно редкая аннотация, т.к. пользуются ей, если надо запустить код на другом «нативном» языке. Я попытался найти понятное упоминание о ней, но не получилось.
Аннотации. Часть первая, немного скучная - 3
SuppressWarnings — часто используется в виде @SuppressWarnings("unchecked"). Используется, чтобы подавлять предупреждения, о которых вы в курсе. Пример выше подавляет предупреждения о приведении непроверенных типов. Опять же я встречал только в таков виде, использовании.
Аннотации. Часть первая, немного скучная - 4
Generated — столкнулся сейчас, когда по заданию приходится генерировать классы из xsd файлов. Эти 3 аннотации довольно специфичны и на данный момент вам, скорее всего, неинтересны. Опишу последнюю.
Аннотации. Часть первая, немного скучная - 5
Override — ей вы пользуетесь постоянно и она делает очень полезную вещь. При переопределении метода легко ошибиться, если только это не делает IDEA. Очепятки или просто ошибки, бывает. Эта аннотация будет следить, что метод в родительском классе совпадает с нашим (помеченным) методом. Это гарантирует нам, что метод будет переопределен, а не дописан. При рефакторинге кода, метод может быть удален или изменен. Опять же аннотация вам укажет на ошибку. Без неё наш метод просто дописался бы.
Аннотации. Часть первая, немного скучная - 6
Скучно? Я бы сказал да, из этой статьи мало что полезного можно вынести. Почти все в ней (90%) рассказ о чем-то, чем вы не будете пользоваться, или будете, но очень редко. Оставшиеся 10% это привет и описание аннотации Override, которая на первый взгляд бесполезная. Ну, что же думаю, во второй части статьи будет интереснее. Там буду RUNTIME аннотации, а они взаимодействуют с кодом в реальном времени и творят черную магию. Аннотации. Часть вторая. Lombok.
Комментарии (10)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Никита Уровень 51
1 июня 2023
оч плохая статья
Олег Уровень 111 Expert
27 мая 2023
Вот что удалось найти: "Аннотации с RetentionPolicy.CLASS сохраняются в скомпилированном байт-коде, но не доступны во время выполнения программы. Это означает, что они могут быть использованы для статического анализа кода или генерации дополнительных ресурсов во время компиляции, но они не могут быть прочитаны или обработаны с помощью механизмов рефлексии во время выполнения. Некоторые возможные сценарии использования аннотаций с RetentionPolicy.CLASS: Статический анализ: Аннотации могут использоваться для аннотирования кода с метаданными, которые необходимы для статического анализа. Например, инструменты статического анализа могут проверять наличие или отсутствие определенных аннотаций для обнаружения потенциальных проблем в коде. Генерация дополнительных ресурсов: Аннотации могут использоваться для указания дополнительных метаданных, которые используются в процессе генерации дополнительных ресурсов, таких как файлы конфигурации или документация. Например, инструменты генерации документации могут просматривать аннотации @ApiDoc на классах и методах для создания соответствующей документации API. Стиль и документирование кода: Аннотации могут использоваться для добавления метаданных, связанных со стилем кода или документированием. Например, аннотации могут указывать, какие методы являются обязательными для переопределения в подклассе или предоставлять дополнительные комментарии и описания для улучшения понимания кода. Важно отметить, что аннотации с RetentionPolicy.CLASS не будут доступны во время выполнения программы, их значения не могут быть прочитаны или обработаны с помощью механизмов рефлексии. Если вам требуется доступ к аннотациям во время выполнения, вам следует использовать RetentionPolicy.RUNTIME."
Kotamadeo Уровень 51
7 января 2023
Слишком много косяков и субъективности, неплохо было бы отрефакторить статью
Вячеслав Уровень 75 Expert
20 июля 2022
Автор будто торопился куда-то, очень много опечаток
Сергей Уровень 41
10 июля 2022
Стиль статьи у Виктора Сергеева очень похож на стиль лекций на JavaRush! =)))
LuneFox Уровень 41 Expert
11 марта 2022
Сейчас я расскажу вам о кошках. Кошки бывают большими, средними и маленькими. Большие кошки это тигры и львы. Иногда их используют в цирке, но поскольку их нельзя завести дома, вам они на данном этапе будут неинтересны. Перейдём к средним кошкам - это манулы и рыси. Вроде как водятся в лесу, но реальных примеров приручения я почти нигде не встречал. Поэтому не запоминайте. Перейдём к самому интересному - наверняка вы уже успели в жизни встретить или даже погладить маленьких домашних кошек. Они есть почти в каждой семье. Казалось бы, ну есть - и есть, значит так надо. Но всё намного сложнее. Например, они могут снимать стресс. Ну вот и всё, мой первый рассказ о кошках подошёл к концу.
Konstantin Уровень 41
15 ноября 2020
Черная махия - https://www.youtube.com/watch?v=eU37agSGRko