Первая часть. Очень коротко написал про аннотации с типом SOURCE и CLASS. Стоит прочитать, чтобы не потеряться во второй части и что бы начать "непонимать" немного больше =) Здесь точно будет минимум одно слово, которое вы знаете!
Первый раз я их видел в задачках тут и как-то не замечал. Ну, болтается 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 – проверяет переопределение метода.
Поподробнее:
Native — никогда не видел и никогда не пользовался. Думаю довольно редкая аннотация, т.к. пользуются ей, если надо запустить код на другом «нативном» языке. Я попытался найти понятное упоминание о ней, но не получилось.
SuppressWarnings — часто используется в виде @SuppressWarnings("unchecked"). Используется, чтобы подавлять предупреждения, о которых вы в курсе. Пример выше подавляет предупреждения о приведении непроверенных типов. Опять же я встречал только в таков виде, использовании.
Generated — столкнулся сейчас, когда по заданию приходится генерировать классы из xsd файлов. Эти 3 аннотации довольно специфичны и на данный момент вам, скорее всего, неинтересны. Опишу последнюю.
Override — ей вы пользуетесь постоянно и она делает очень полезную вещь. При переопределении метода легко ошибиться, если только это не делает IDEA. Очепятки или просто ошибки, бывает. Эта аннотация будет следить, что метод в родительском классе совпадает с нашим (помеченным) методом. Это гарантирует нам, что метод будет переопределен, а не дописан. При рефакторинге кода, метод может быть удален или изменен. Опять же аннотация вам укажет на ошибку. Без неё наш метод просто дописался бы.
Скучно? Я бы сказал да, из этой статьи мало что полезного можно вынести. Почти все в ней (90%) рассказ о чем-то, чем вы не будете пользоваться, или будете, но очень редко. Оставшиеся 10% это привет и описание аннотации Override, которая на первый взгляд бесполезная. Ну, что же думаю, во второй части статьи будет интереснее. Там буду RUNTIME аннотации, а они взаимодействуют с кодом в реальном времени и творят черную магию. Аннотации. Часть вторая. Lombok.