— Привіт, Аміго!
— Здорово, Ріша.
— Сьогодні я ближче познайомлю тебе з анотаціями.
Як ти вже, напевно, знаєш – анотації – це такі спеціальні слова, які можна розміщувати поряд із класами, полями, методами та змінними.
— Ага. Дуже часто їх зустрічаю.
— Іноді їх називають щеметаданними. Основне їх завдання – зберігати деяку додаткову інформацію про методи, поля та класи.
— А для кого вони її зберігають?
— Це дуже добре питання.
Якщо ці анотації пишуть, значить, вони комусь потрібні.
Аннотації дозволяють зберігати додаткову інформацію про код та елементи програми, але формально не є частиною коду.
Аннотації можна використовувати для генерації 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()
{
}
— Зрозуміло.
— Щось я трохи втомився, піду, промочу горло. Давай продовжимо після перерви, ок?
— Звісно.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ