Первая часть. Очень коротко написал про аннотации с типом SOURCE и CLASS. Стоит прочитать, чтобы не потеряться во второй части и что бы начать "непонимать" немного больше =) Здесь точно будет минимум одно слово, которое вы знаете!
Первый раз я их видел в задачках тут и как-то не замечал. Ну, болтается Override, её же IDEA написала, значит так надо. Со временем я понял, что все намного глубже.
Пока учишься, аннотации кажутся чем-то бесполезным, но необходимым. Ты не знаешь, зачем они, что делают. Вроде прочитал пару статей, там рассказали «как здорово, что теперь у нас есть аннотации, все стало так просто». Но я не знал, как было раньше, и не понимал, что теперь стало проще. Теперь знаю и хочу рассказать немного.
Есть 3 типа аннотаций (RetentionPolicy):
- SOURCE – аннотации для компилятора
- CLASS – данные из аннотации будут записаны в байткод но недоступны во время работы. Пишут, что в стандартной библиотеке много аннотаций используют этот вид, и сейчас его держат из-за обратной совместимости. Применяется для очень специфичных задач.
- Воспрос и ответ на StackOverflow
- RUNTIME – самые популярны, используются во время работы кода.
- java/lang/annotation/Native.class;
- java/lang/SuppressWarnings.class
- javax/annotation/Generated.class
- ,java/lang/Override.class
- com/sun/istack/internal/Nullable.class
- com/sun/istack/internal/NotNull.class
- com/sun/istack/internal/Interned.class
- Native – переменная под этой аннотацией может ссылаться на нативынй код;
- SuppressWarnings – подавляет различные предупреждения компилятора;
- Generated – маркирует исходных код, который был сгенерирован;
- Override – проверяет переопределение метода.
Native — никогда не видел и никогда не пользовался. Думаю довольно редкая аннотация, т.к. пользуются ей, если надо запустить код на другом «нативном» языке. Я попытался найти понятное упоминание о ней, но не получилось.
SuppressWarnings — часто используется в виде @SuppressWarnings("unchecked"). Используется, чтобы подавлять предупреждения, о которых вы в курсе. Пример выше подавляет предупреждения о приведении непроверенных типов. Опять же я встречал только в таков виде, использовании.
Generated — столкнулся сейчас, когда по заданию приходится генерировать классы из xsd файлов.
Эти 3 аннотации довольно специфичны и на данный момент вам, скорее всего, неинтересны. Опишу последнюю.
Override — ей вы пользуетесь постоянно и она делает очень полезную вещь. При переопределении метода легко ошибиться, если только это не делает IDEA. Очепятки или просто ошибки, бывает. Эта аннотация будет следить, что метод в родительском классе совпадает с нашим (помеченным) методом. Это гарантирует нам, что метод будет переопределен, а не дописан.
При рефакторинге кода, метод может быть удален или изменен. Опять же аннотация вам укажет на ошибку. Без неё наш метод просто дописался бы.
Скучно? Я бы сказал да, из этой статьи мало что полезного можно вынести. Почти все в ней (90%) рассказ о чем-то, чем вы не будете пользоваться, или будете, но очень редко. Оставшиеся 10% это привет и описание аннотации Override, которая на первый взгляд бесполезная. Ну, что же думаю, во второй части статьи будет интереснее. Там буду RUNTIME аннотации, а они взаимодействуют с кодом в реальном времени и творят черную магию.
Аннотации. Часть вторая. Lombok.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ