Домой Учебники по Java и J2EE Понимание аннотаций Java — учебник по Java @annotations

Понимание аннотаций Java — учебник по Java @annotations

779
0

Как и где аннотации используются в Java?

Аннотация на языке программирования Java — это особая форма синтаксических метаданных, которые могут быть добавлены в исходный код Java. Классы, методы, переменные, параметры и пакеты могут быть аннотированы. В отличие от тегов Javadoc, аннотации Java могут быть отражающими в том смысле, что они могут быть встроены в файлы классов, сгенерированные компилятором, и могут быть сохранены виртуальной машиной Java для возможности их извлечения во время выполнения. Можно создавать метааннотации из существующих в Java, что делает эту концепцию более сложной.

Java определяет набор аннотаций, которые встроены в язык.

Аннотации, примененные к коду Java:

  • @Override — проверяет, что функция является переопределением. Вызывает предупреждение компиляции, если функция не найдена ни в одном из родительских классов.
  • @Deprecated — помечает функцию как устаревшую. Вызывает предупреждение компиляции, если используется функция.
  • @SuppressWarningsУказывает компилятору подавлять предупреждения времени компиляции, указанные в параметрах аннотации.

Аннотации, применяемые к другим аннотациям:

  • @Retention — указывает, как хранится помеченная аннотация — независимо от того, находится ли она в коде, скомпилирована в класс или доступна во время выполнения посредством отражения.
  • @Documentedпомечает другую аннотацию для включения в документацию.
  • @Targetпомечает другую аннотацию, чтобы ограничить тип java-элементов, к которым может быть применена аннотация.
  • @Inheritedпомечает другую аннотацию для наследования подклассам аннотированного класса (по умолчанию аннотации не наследуются подклассам).

Давайте посмотрим на это с помощью примеров:

1) @Override Аннотация:

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

Наиболее распространенный вариант использования @Override — методы Object :

1
2
3
4
@ Override
общественности ИНТ hashValue ( ) {
     Система. вне. Println ( «Этот метод использует аннотацию @Override» ) ;
}

Основная причина @Override была создана в том, чтобы иметь дело с простыми опечатками. Например, метод, ошибочно объявленный как

1
общественности ИНТ hashvalue ( ) { . , , }

на самом деле это не переопределение — имя метода содержит все строчные буквы, поэтому оно не совсем совпадает с именем метода hashValue () . Однако он будет компилироваться на отлично. Такую ошибку легко совершить и трудно отследить, что является опасной комбинацией. Использование аннотации @Override предотвращает такие ошибки.

Вы должны иметь привычку использовать @Override всякий раз, когда переопределяете метод суперкласса.

2) @ Устаревшая аннотация:

Эта аннотация указывает, что отмеченный элемент устарел и больше не должен использоваться. Компилятор генерирует предупреждение всякий раз, когда программа использует метод, класс или поле с @Deprecated аннотаций. Когда элемент устарел, он также должен быть задокументирован с использованием Javadoc @deprecated тег, как показано в следующем примере.

1
2
3
4
< strong > @ устарела < / strong >
статический недействительным deprecatedMethod ( ) {
     Система. вне. Println ( «Этот метод устарел ..» ) ;
}

3) @SuppressWarnings Аннотация:

Просто скажите компилятору, пожалуйста, не кричите. Я знаю, что я делаю.

1
2
3
4
@ SuppressWarnings ( «серийный» )
общественности учебный класс OldCode инвентарь Serializable {
Система. вне. Println ( «Это старый код ..» ) ;
}

4) @Retention Аннотация:

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

  • RetentionPolicy.SOURCE — Аннотации с этим типом будут сохраняться только на уровне источника и будут игнорироваться компилятором.
  • RetentionPolicy.CLASS — аннотации с этим типом будут сохраняться компилятором во время компиляции, но будут игнорироваться виртуальной машиной.
  • RetentionPolicy.RUNTIME — Аннотации с этим типом будут храниться на виртуальной машине, поэтому они могут быть прочитаны только во время выполнения.

1
2
3
4
@ Retention ( RetentionPolicy . RUNTIME )
общественности @ интерфейс Crunchify_Retention {
   строка returnSomething ( ) ;
}

В этом примере @Retention(RetentionPolicy.RUNTIME) аннотация указывает, что ваша аннотация Crunchify_Retention должна быть сохранена виртуальной машиной, чтобы ее можно было рефлексивно прочитать во время выполнения.

ЧИТАТЬ ТАКЖЕ:  Как получить IP-адрес сервера и имя хоста в Java

5) @Documented Annotation:

1
2
3
4
@ Документировано
общественности @ интерфейс Crunchify_Documented {
   строка writeDocument ( ) ;
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
общественности учебный класс DocumentedAnnotations {
   общественности статический недействительным главная ( Строка arg [ ] ) {
       новый Документированные аннотации ( ) . executeRetention ( ) ;
       новый Документированные аннотации ( ) . executeDocumented ( ) ;
   }
   @ Crunchify_Retention ( returnSomething = Hello retention test )
   общественности недействительным executeRetention ( ) {
       Система. вне. printf ( «Тестирование аннотации« Crunchify_Retention » ) ;
   }
   @ Crunchify_Documented ( writeDocument = Привет документ )
   общественности недействительным executeDocumented ( ) {
       Система. вне. printf ( «Тестирование аннотации« Crunchify_Documented »» ) ;
   }
}

Теперь попробуйте запустить команду Java Doc и посмотрите вывод.

6) @Target Аннотация:

Цель указывает, какие программные элементы могут быть аннотированы с использованием экземпляров аннотированного типа аннотации. Значение Target является одним из членов java.lang.annotation.ElementType перечисление:

  1. ANNOTATION_TYPE. Аннотированный тип аннотации может использоваться для аннотирования объявления типа аннотации.
  2. КОНСТРУКТОР. Аннотированный тип аннотации может использоваться для аннотирования объявления конструктора.
  3. Область. Аннотированный тип аннотации может использоваться для аннотирования объявления поля.
  4. LOCAL_VARIABLE. Аннотированный тип аннотации может использоваться для аннотирования объявления локальной переменной.
  5. МЕТОД. Аннотированный тип аннотации может использоваться для аннотирования объявления метода.
  6. ПАКЕТ. Аннотированный тип аннотации может использоваться для аннотирования объявлений пакета.
  7. ПАРАМЕТР. Аннотированный тип аннотации может использоваться для аннотирования объявлений параметров.
  8. ТИП. Аннотированный тип аннотации может использоваться для аннотирования объявлений типов.

1
2
3
4
@ Target ( значение = МЕТОД )
Вы можете иметь несколько значений в целевая аннотаций.
@ Target ( value = { TYPE , ПОЛЕ , МЕТОД , ПАРАМЕТР , КОНСТРУКТОР , LOCAL_VARIABLE } )

7) @ Наследственная аннотация:

Точно так же, как звучит название, @Inherited Тип аннотации наследуется подклассами аннотированного типа.

1
2
3
4
5
6
7
8
9
10
@ Наследуется
@ интерфейс Для всех { }
@ интерфейс Только для меня { }
@ ForEveryone
@ JustForMe
учебный класс Superclass { }
учебный класс Подкласс продолжается Superclass { }

В этом примере Superclass был явно аннотирован с обоими @ForEveryone а также @JustForMe , Subclass не был явно помечен ни одним из них; однако, он наследует @ForEveryone потому что последний аннотирован @Inherited , @JustForMe не аннотируется, поэтому не наследуется Subclass ,

Вот аннотации уровня класса

Понимание аннотаций Java — учебник по Java @annotations

0.00 (0%) 0 votes

ОСТАВЬТЕ ОТВЕТ

Пожалуйста, введите ваш комментарий!
пожалуйста, введите ваше имя здесь