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

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

Статья из группы 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, 09:38
оч плохая статья
Олег
Уровень 111
Expert
27 мая 2023, 18:31
Вот что удалось найти: "Аннотации с RetentionPolicy.CLASS сохраняются в скомпилированном байт-коде, но не доступны во время выполнения программы. Это означает, что они могут быть использованы для статического анализа кода или генерации дополнительных ресурсов во время компиляции, но они не могут быть прочитаны или обработаны с помощью механизмов рефлексии во время выполнения. Некоторые возможные сценарии использования аннотаций с RetentionPolicy.CLASS: Статический анализ: Аннотации могут использоваться для аннотирования кода с метаданными, которые необходимы для статического анализа. Например, инструменты статического анализа могут проверять наличие или отсутствие определенных аннотаций для обнаружения потенциальных проблем в коде. Генерация дополнительных ресурсов: Аннотации могут использоваться для указания дополнительных метаданных, которые используются в процессе генерации дополнительных ресурсов, таких как файлы конфигурации или документация. Например, инструменты генерации документации могут просматривать аннотации @ApiDoc на классах и методах для создания соответствующей документации API. Стиль и документирование кода: Аннотации могут использоваться для добавления метаданных, связанных со стилем кода или документированием. Например, аннотации могут указывать, какие методы являются обязательными для переопределения в подклассе или предоставлять дополнительные комментарии и описания для улучшения понимания кода. Важно отметить, что аннотации с RetentionPolicy.CLASS не будут доступны во время выполнения программы, их значения не могут быть прочитаны или обработаны с помощью механизмов рефлексии. Если вам требуется доступ к аннотациям во время выполнения, вам следует использовать RetentionPolicy.RUNTIME."
Kotamadeo Software Engineer в Tinkoff
7 января 2023, 14:52
Слишком много косяков и субъективности, неплохо было бы отрефакторить статью
Вячеслав
Уровень 75
Expert
20 июля 2022, 12:07
Автор будто торопился куда-то, очень много опечаток
LuneFox Java Developer в BIFIT Expert
2 октября 2022, 01:26
VictorRush!
Сергей
Уровень 41
10 июля 2022, 08:55
Стиль статьи у Виктора Сергеева очень похож на стиль лекций на JavaRush! =)))
LuneFox Java Developer в BIFIT Expert
11 марта 2022, 15:10
Сейчас я расскажу вам о кошках. Кошки бывают большими, средними и маленькими. Большие кошки это тигры и львы. Иногда их используют в цирке, но поскольку их нельзя завести дома, вам они на данном этапе будут неинтересны. Перейдём к средним кошкам - это манулы и рыси. Вроде как водятся в лесу, но реальных примеров приручения я почти нигде не встречал. Поэтому не запоминайте. Перейдём к самому интересному - наверняка вы уже успели в жизни встретить или даже погладить маленьких домашних кошек. Они есть почти в каждой семье. Казалось бы, ну есть - и есть, значит так надо. Но всё намного сложнее. Например, они могут снимать стресс. Ну вот и всё, мой первый рассказ о кошках подошёл к концу.
Elidriel
Уровень 35
10 апреля 2022, 07:41
такое же ощущение словил)
Dmytryi Shubchynskyi
Уровень 108
Expert
1 октября 2022, 22:03
тянет на статью
Konstantin
Уровень 41
15 ноября 2020, 11:59
Черная махия - https://www.youtube.com/watch?v=eU37agSGRko