Annotation

Аннотация - являются своего рода метками в коде, описывающими метаданные для функции/класса/пакета.

Проработать

  1. Advanced Java - Annotations/Reflection
  2. Аннотации в JAVA: обзор синтаксиса и создание собственных

Основные особенности

  1. Пример создания аннотации:(public @interface Command)
  2. В качестве параметров могут быть использованы только примитивы, String, Enum.

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

  1. @Override - указывает переопределенный метод родительского класса. Делает проверку наличия метода у родителя.
  2. @Deprecated - указывает метод, класс или переменную, которые являются "устаревшими" и могут быть убраны в следующих версиях.
  3. @SuppressWarnings - отключает вывод предупреждений компилятора, которые касаются элемента наж которым она указана.
  4. @Nullable - указывает что параметр может принять null. А метод может вернуть null.
  5. @NotNull - указывает что параметр не может принять null. А метод не может вернуть null.

Мета-Аннотации(применяемые к другим аннотациям)

@Retention

@Retention - тип хранения. Определяет, стадию до которой "доживает" аннотация. Можно указать только одну.

  1. RetentionPolicy.SOURCE - аннотация используется при написании кода и должна отбрасываться компилятором. Не сохраняется после компиляции. Для препроцессоров или указаний компилятору.
  2. RetentionPolicy.CLASS - аннтоация будет записана в class-файл компилятором, но не должна быть доступна во время выполнения (runtime).
  3. RetentionPolicy.RUNTIME - аннотация будет записана в class-файл и доступна во время выполнения через reflection.

Пример: @Retention(RetentionPolicy.RUNTIME)

@Target

@Target - тип объекта над которым будет использовано. Можно указывать несколько.

  1. ElementType.ANNOTATION_TYPE - другая аннотация.
  2. ElementType.CONSTRUCTOR - конструктор класса.
  3. ElementType.FIELD - поле класса.
  4. ElementType.LOCAL_VARIABLE - локальная переменная.
  5. ElementType.METHOD - метод класса.
  6. ElementType.PACKAGE - описание пакета package.
  7. ElementType.PARAMETER - параметр метода. Пример: public void hello(@Annotation String param){}
  8. ElementType.TYPE - указывается над классом.

Пример: @Target({ ElementType.FIELD, ElementType.TYPE, ElementType.METHOD})

  1. @Documented — отмечает аннотацию для включения в документацию.
  2. @Inherited — отмечает, что аннотация может быть расширена подклассами аннотируемого класса.