Annotation
Аннотация - являются своего рода метками в коде, описывающими метаданные для функции/класса/пакета.
Основные особенности
- Пример создания аннотации:(public @interface Command)
- В качестве параметров могут быть использованы только примитивы, String, Enum.
Основные аннотации
- @Override - указывает переопределенный метод родительского класса. Делает проверку наличия метода у родителя.
- @Deprecated - указывает метод, класс или переменную, которые являются "устаревшими" и могут быть убраны
в следующих версиях.
- @SuppressWarnings - отключает вывод предупреждений компилятора, которые касаются элемента наж которым
она указана.
- @Nullable - указывает что параметр может принять null. А метод может вернуть null.
- @NotNull - указывает что параметр не может принять null. А метод не может вернуть null.
Мета-Аннотации(применяемые к другим аннотациям)
@Retention
@Retention - тип хранения. Определяет, стадию до которой "доживает" аннотация. Можно указать только одну.
- RetentionPolicy.SOURCE - аннотация используется при написании кода и должна отбрасываться компилятором.
Не сохраняется после компиляции. Для препроцессоров или указаний компилятору.
- RetentionPolicy.CLASS - аннтоация будет записана в class-файл компилятором, но не должна быть доступна
во время выполнения (runtime).
- RetentionPolicy.RUNTIME - аннотация будет записана в class-файл и доступна во время выполнения через
reflection.
Пример: @Retention(RetentionPolicy.RUNTIME)
@Target
@Target - тип объекта над которым будет использовано. Можно указывать несколько.
- ElementType.ANNOTATION_TYPE - другая аннотация.
- ElementType.CONSTRUCTOR - конструктор класса.
- ElementType.FIELD - поле класса.
- ElementType.LOCAL_VARIABLE - локальная переменная.
- ElementType.METHOD - метод класса.
- ElementType.PACKAGE - описание пакета package.
- ElementType.PARAMETER - параметр метода. Пример: public void hello(@Annotation String param){}
- ElementType.TYPE - указывается над классом.
Пример: @Target({ ElementType.FIELD, ElementType.TYPE, ElementType.METHOD})
- @Documented — отмечает аннотацию для включения в документацию.
- @Inherited — отмечает, что аннотация может быть расширена подклассами аннотируемого класса.