Основы аннотаций

Базовый Java
≈ 2 мин чтения

Аннотация описывает код, а не заменяет его

Аннотация — это метаданные, прикреплённые к элементу программы. Запись начинается с символа @ и может стоять у класса, метода, поля, параметра и других элементов — если тип конкретной аннотации разрешает такое использование.

class ReportService {

    @Override
    public String toString() {
        return "ReportService";
    }
}

Здесь @Override сообщает компилятору о намерении переопределить метод. Если сигнатура окажется неправильной и переопределения на самом деле нет, компилятор сообщит об ошибке. Сама аннотация не вставляет новый метод и не выполняет скрытый код.

Кто использует аннотации

Метаданные могут быть полезны на разных этапах жизни программы. Одни аннотации читает компилятор, другие обрабатывают инструменты сборки или генераторы кода, а некоторые сохраняются до времени выполнения и могут быть прочитаны библиотекой через Reflection. Поэтому одинаковая внешне запись @Something ещё не говорит, когда именно она будет использована.

Аннотации со значениями

Аннотация может содержать элементы — именованные значения, которые задаются при использовании. Если у элемента есть значение по умолчанию, его можно не указывать.

@SuppressWarnings("unused")
void prepareReport() {
    int draftVersion = 1;
}

В данном случае строка "unused" — значение элемента аннотации. У разных аннотаций набор таких элементов свой: это часть их объявления, а не произвольные параметры.

Аннотация сама по себе обычно ничего не делает. Поведение появляется потому, что компилятор, библиотека, фреймворк или другой инструмент знает эту аннотацию и интерпретирует её по своим правилам.