— Привіт, Аміго!

— Здорово, Ріша.

— Сьогодні я ближче познайомлю тебе з анотаціями.

Як ти вже, напевно, знаєш – анотації – це такі спеціальні слова, які можна розміщувати поряд із класами, полями, методами та змінними.

— Ага. Дуже часто їх зустрічаю.

— Іноді їх називають щеметаданними. Основне їх завдання – зберігати деяку додаткову інформацію про методи, поля та класи.

— А для кого вони її зберігають?

— Це дуже добре питання.

Якщо ці анотації пишуть, значить, вони комусь потрібні.

Аннотації дозволяють зберігати додаткову інформацію про код та елементи програми, але формально не є частиною коду.

Аннотації можна використовувати для генерації XML, визначення, застарілий метод чи ні, відстеження помилок тощо.

Приклад анотацій у коді:

Приклад
@CatInfo(manager=Catmanager.class, unique=true)
class Cat
{
 @Name("Murka")
 private String name;

@SuppressWarnings(value = "unchecked")
 void getUniqueCatName()
 {

 }
}

Як ти бачиш, в анотаціях можна зберігати дані.

Якщо анотація має тільки одне полеvalue, то його можна опускати:

Приклад
@SuppressWarnings("unchecked")
void getUniqueCatName()
{

}

Якщо параметрів у дужках немає, дужки теж можна не писати:

Приклад
@Override
void getUniqueCatName()
{

}

Створити свою інструкцію дуже легко. Оголошення анотації – практично ідентичне оголошення інтерфейсу.

Приклад
@interface CatManager
{
 Class manager();
 boolean unique();
 String name() default "Unknown Cat";
}

Є ціла пара відмінностей.

По-перше, перед словом interface ставиться символ «@».

По-друге, інструкція може містити значення за промовчанням. Для цього використовується слово default. Див. Приклад вище. Такі параметри є необов'язковими і їх можна опускати під час додавання анотацій.

— Ага. Все виявилось простіше, ніж я думав. А то я вже шарахався від них, як Рободявол від святої води. Неприємно, коли в коді купа всяких штук, які до кінця не розумієш.

— О, добре, що нагадав, хочу ще розповісти про анотації, що використовуються компілятором.

Таких анотацій всього 3. Поки що три.

@Deprecated.

Клас або метод можна позначити анотацією @Deprecated. Тоді компілятор буде видавати попередження (попередження — це не помилка), а Intellij IDEA відображатиме цей метод як перекреслений. Приблизно так:

Приклад
Date date = new Date();
int year = date.getYear();

@Override.

При перевизначенні методу, хорошим тоном вважається додати йому анотацію @Override.

— А для чого? Начебто IDEA і так показує, чи перевизначений метод чи ні?

— По-перше, чи то IDEA, чи то синтаксис Java.

А по-друге, гіпотетично може бути ситуація, коли метод базового класу перейменують, а метод спадкоємця – ні. І програма працюватиме неправильно, але ніхто цього не помітить. Для запобігання таким ситуаціям і була придумана ця анотація:

Приклад
@Override
void getUniqueCatName()
{

}

@SuppressWarnings.

— Іноді компілятор виводить багато попереджень. Або ми знаємо про «проблеми» та свідомо пішли на таке використання. За допомогою цієї інструкції можна приховати частину з них.

За допомогою анотації @SuppressWarnings, програміст може сказати компілятору: не потрібно показувати попередження, так задумано, це не помилка. Приклад:

Приклад
@SuppressWarnings("unchecked")
void getUniqueCatName()
{

}

— Зрозуміло.

— Щось я трохи втомився, піду, промочу горло. Давай продовжимо після перерви, ок?

— Звісно.