Содержание
- 1 Аннотации, примененные к коду Java:
- 2 Аннотации, применяемые к другим аннотациям:
- 3 1) @Override Аннотация:
- 4 2) @ Устаревшая аннотация:
- 5 3) @SuppressWarnings Аннотация:
- 6 4) @Retention Аннотация:
- 7 5) @Documented Annotation:
- 8 6) @Target Аннотация:
- 9 7) @ Наследственная аннотация:
- 10 Вот аннотации уровня класса
Как и где аннотации используются в 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 должна быть сохранена виртуальной машиной, чтобы ее можно было рефлексивно прочитать во время выполнения.
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 перечисление:
- ANNOTATION_TYPE. Аннотированный тип аннотации может использоваться для аннотирования объявления типа аннотации.
- КОНСТРУКТОР. Аннотированный тип аннотации может использоваться для аннотирования объявления конструктора.
- Область. Аннотированный тип аннотации может использоваться для аннотирования объявления поля.
- LOCAL_VARIABLE. Аннотированный тип аннотации может использоваться для аннотирования объявления локальной переменной.
- МЕТОД. Аннотированный тип аннотации может использоваться для аннотирования объявления метода.
- ПАКЕТ. Аннотированный тип аннотации может использоваться для аннотирования объявлений пакета.
- ПАРАМЕТР. Аннотированный тип аннотации может использоваться для аннотирования объявлений параметров.
- ТИП. Аннотированный тип аннотации может использоваться для аннотирования объявлений типов.
|
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 ,
Вот аннотации уровня класса
0.00 (0%) 0 votes









