0Pricing
Java Academy · Урок

Определение аннотаций: элементы и значения по умолчанию

Создавайте пользовательские аннотации с помощью @interface, определяйте элементы со значениями по умолчанию и применяйте метааннотации.

«Определение аннотаций: элементы и значения по умолчанию» — бесплатный урок Java Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Java Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Java Academy содержит 4 уроков всего.

Что такое аннотации

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

Объявление аннотации с помощью @interface

Используйте @interface, чтобы объявить пользовательскую аннотацию. Её элементы выглядят как методы. Значение по умолчанию задаётся с помощью default.

@interface Retry {
    int times()      default 3;
    long delayMs()   default 1000L;
    Class<? extends Throwable>[] on() default {Exception.class};
}

Применение аннотации

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

@Retry(times = 5, delayMs = 500)
public void callExternalService() { ... }

// Single-element shorthand:
@interface Label { String value(); }
@Label("production")
public class App {}

Типы элементов аннотаций

Элементами могут быть только примитивы (int, long и т. д.), String, Class, перечисление enum, другой тип аннотации или одномерный массив одного из перечисленных типов.

@interface Config {
    String   host();
    int      port()      default 8080;
    LogLevel level()     default LogLevel.INFO;  // enum
    Class<?> handler()   default DefaultHandler.class;
    String[] tags()      default {};
}

Мета-аннотации: @Retention

@Retention определяет, как долго сохраняется аннотация: SOURCE (отбрасывается компилятором), CLASS (сохраняется в .class, но недоступна во время выполнения), RUNTIME (доступна через рефлексию).

@Retention(RetentionPolicy.RUNTIME)
@interface Retry {
    int times() default 3;
}

Мета-аннотации: @Target

@Target ограничивает места, где можно применять аннотацию. Можно указать несколько целевых элементов.

@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@interface Audited {
    String description() default "";
}

@Documented и @Inherited

@Documented включает аннотацию в документацию Javadoc. @Inherited позволяет подклассам наследовать аннотацию от суперкласса (только для аннотаций на уровне класса).

@Documented
@Inherited
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@interface Category {
    String value();
}

Повторяемые аннотации @Repeatable

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

@Repeatable(Tags.class)
@interface Tag { String value(); }
@interface Tags { Tag[] value(); }

@Tag("fast")
@Tag("stable")
public class Service {}

Значения по умолчанию и пропуск элементов

Элементы со значениями default не нужно указывать в месте вызова. Элементы без значений по умолчанию обязательны.

@Retry                  // uses defaults: times=3, delayMs=1000
public void action1() {}
@Retry(times=1)         // overrides only times; delayMs stays 1000
public void action2() {}

Аннотация и маркерный интерфейс

Маркерные интерфейсы (например, Serializable) проверяются с помощью instanceof и передают информацию о типе. Аннотации более гибкие: они содержат метаданные и могут иметь элементы.

Распространённые встроенные аннотации

Знайте аннотации JDK: @Override, @Deprecated, @FunctionalInterface, @SuppressWarnings и @SafeVarargs.

@Override
public String toString() { return "User{" + name + "}"; }
@Deprecated(since = "2.0", forRemoval = true)
public void oldMethod() {}

Быстрая проверка

Какая единственная политика сохранения делает аннотацию доступной во время выполнения?

Итоги

Объявляйте аннотации с помощью @interface. Используйте @Retention(RUNTIME) для обработки через рефлексию, @Target для ограничения применения и default для необязательных элементов. @Repeatable позволяет использовать аннотацию несколько раз.

Часто задаваемые вопросы

Урок «Определение аннотаций: элементы и значения по умолчанию» бесплатный?

Да — полный текст урока «Определение аннотаций: элементы и значения по умолчанию» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Java Academy, подпишись на CoddyKit PRO. Курс Java Academy содержит 4 уроков всего.

Чему я научусь в уроке «Определение аннотаций: элементы и значения по умолчанию»?

Создавайте пользовательские аннотации с помощью @interface, определяйте элементы со значениями по умолчанию и применяйте метааннотации. Ты практикуешь Java Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Java Academy?

Предыдущий опыт не требуется. Java Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «Определение аннотаций: элементы и значения по умолчанию»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Java Academy?

Да. Каждый урок Java Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Определение аннотаций: элементы и значения по умолчанию
  2. Политики хранения и типы целей
  3. Обработка аннотаций во время выполнения
  4. Процессоры аннотаций во время компиляции
← Назад к Java Academy