— Привет, Амиго!
— Здорово, Риша.
— Сегодня я поближе познакомлю тебя с аннотациями.
Как ты уже, наверное, знаешь – аннотации – это такие специальные слова, которые можно размещать рядом с классами, полями, методами и переменными.
— Ага. Очень часто их встречаю.
— Иногда их называют еще метаданными. Основная их задача – хранить некоторую дополнительную информацию о методах, полях и классах.
— А для кого они ее хранят?
— Это очень хороший вопрос.
Раз эти аннотации пишут, значит, они кому-то нужны.
Аннотации позволяют хранить дополнительную информацию о коде и элементах программы, но формально не являются частью кода.
Аннотации можно использовать для генерации 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()
{
}
— Понятно.
— Что-то я немного устал, пойду, промочу горло. Давай продолжим после перерыва, ок?
— Конечно.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
getYear();