Обзор
Java представила аннотацию в версии 1.5, также известной как аннотация Java. Аннотация - это своего рода синтаксические метаданные, которые можно использовать непосредственно в исходном коде, а классы/методы/переменные/параметры/имена пакетов и т. Д. Могут быть аннотированы. В отличие от тегов Javadoc, компилятор может сохранить код аннотации при генерации файла класса. В то же время, чтобы использовать аннотации во время процесса выполнения, виртуальная машина Java сохраняет аннотацию, так что соответствующая информация об аннотации может быть получена посредством отражения.
Встроенная аннотация
На самом деле, мы часто сталкиваемся с аннотациями, такими как @Override, @Deprecated и т. Д. Это все встроенные аннотации в JDK. Давайте сначала посмотрим на то, что являются основными встроенными аннотациями в Java.
• Аннотации, которые действуют на код Java
◦@Переопределение проверяет, является ли метод переписыванием метода. Если этот метод не найден в родительском классе или реализованном интерфейсе, возникнет ошибка компиляции.
◦@устаревшие отметки, что метод или класс отбрасываются. Если используется класс или метод, процесс компиляции будет предупреждать вас.
◦@PuppressWarnings уведомить компилятор, чтобы игнорировать предупреждения об аннотированных параметрах
◦@safevarargs игнорируют предупреждения о методах вызова или конструкторов, содержащих общие параметры, 1.7 добавили аннотации
◦@functionalInterface указывает, что объявленный интерфейс будет использоваться в качестве функционального интерфейса. 1.8 добавил аннотацию
• Аннотации, сделанные по другим аннотациям, называются мета -аннотациями (мета -аннотация)
◦@Удерживание указывает, когда используется аннотированная аннотация (то есть, когда аннотация будет сохранена)
■ Удерживание только в исходном коде и отброшенном во время компиляции (arsentpolicy.runtime)
■ Аннотации сохраняются в файле класса во время компиляции и игнорируются, когда файл класса загружается (harementpolicy.class)
■ Аннотация читаются при загрузке файла класса, то есть аннотации доступны во время работы. Аннотации могут быть получены посредством размышлений (arsentpolicy.runtime)
◦@Документировано, указывает, что при генерации Javadoc аннотации будут записаны в документ Javadoc.
◦@Цель Определяет область применения аннотированной аннотации ■ elementtype.type: используется для описания класса, интерфейса (включая тип аннотации) или объявление enum ■ elementtype.field: используется для описания домена ■ elementtype.method: используется для описания метода ■ elementtype.parameter: для описания параметров. Конструктор ■ elementtype.local_variable: используется для описания локальной переменной ■ elementtype.annotation_type: используется для описания аннотации ■ elementtype.package: используется для описания пакета
◦ Унаследован @Указывает, что аннотация унаследована, то есть, если тип аннотации, модифицированный @Inhyted, используется для класса, аннотация также будет действовать на подклассе модифицированного класса.
◦@повторяется, указывает, что аннотированная аннотация может быть применена к одному и тому же объекту несколько раз. 1.9 добавил аннотацию
Пользовательские аннотации
Я упомянул так много аннотаций выше, и все сосредотачиваются на мета -аннотациях. Когда мы настраиваем аннотации, мы обычно используем мета -аннотации, чтобы помочь нам. Пользовательский формат аннотации является общедоступным @Interface Annotation Name {определение корпуса}. При использовании пользовательской аннотации @Interface, интерфейс java.lang.annotation.annotation автоматически унаследован. При настройке аннотаций другие аннотации или интерфейсы не могут быть унаследованы. Метод, объявленный в аннотации, на самом деле является параметром комментариев. Имя метода - это имя параметра, а тип возвращаемого значения - тип параметра. Значение по умолчанию параметра может быть объявлено по умолчанию.
Пользовательские аннотации просты, используйте @Interface, чтобы определить аннотацию следующим образом.
@RETENTION (armatedPolicy.Runtime) @Target (elementType.type) @documentedpublic @Interface classInfo {string Автор () по умолчанию "wang"; String date (); String comments ();} Пользовательская аннотация под названием ClassInfo. Согласно @retention, вы можете знать, что эта аннотация всегда будет существовать, то есть эта аннотация все еще действительна, когда программа работает; @Target (elementType.type) означает, что аннотация ClassInfo действует в классе, интерфейс или объявление Enum; @Documented
Инструкции ClassInfo Информация может быть записана в документы Javadoc.
Давайте посмотрим на некоторые параметры аннотации в пользовательских аннотациях. Есть три параметра аннотации. Параметры аннотации могут быть установлены по умолчанию, например, параметр аннотации автора, значение по умолчанию - Wang, а два других параметра не имеют значений по умолчанию.
Давайте посмотрим на другую пользовательскую аннотацию.
@RETENTION (armatedPolicy.Runtime) @Target (elementType.method) public @Interface methodInfo {String description () по умолчанию "Нет описания"; String date ();}Этот пользовательский метод аннотации действует на метод, и эта аннотация также будет существовать, когда программа будет запущена; В нем есть два параметра аннотации.
Чтобы аннотировать определение параметров (определение метода), вы можете использовать только два модификатора прав доступа, публикующегося или дефолт. Типы параметров поддерживают следующие типы.
• Восемь основных типов данных (байт, Int, короткие, длинные, плавучие, двойное, чар, логическое)
• Тип строки
• Тип класса
• Тип перечисления
• Тип аннотации
• Массивы всех типов выше
Использование аннотаций
В дополнение к двум вышеупомянутым аннотациям была добавлена аннотация с областью полевых прицел.
@Retention (arsentpolicy.runtime) @target (elementtype.field) public @Interface fieldInfo {string type (); String name ();}Если значения по умолчанию не объявляются в пользовательских аннотациях, эти параметры должны быть назначены значениями при использовании пользовательских аннотаций, в противном случае компилятор сообщит об ошибке.
Взгляните на код, используемый аннотацией:
@ClassInfo (Author = "wang", date = "2016/9/13", комментарии = "Аннотация Демо") Аннотация открытого класса @Fieldinfo (type = "private", name = "secondfield") частная строка Secondfield; @Methodinfo (description = "Метод в AnnotationDemo", name = "firstmethod") public void FirstMethod (строка value) {System.out.printf ("Первый метод вовлечен"); } @Methodinfo (description = "Метод в AnnotationDemo", name = "secondMethod") private void secondMethod () {System.out.printf ("Первый метод вовлечен"); }}Получить информацию о аннотации
Чтобы получить информацию о аннотации, мы должны сначала убедиться, что аннотация будет существовать во время запуска программы. Поэтому мы, как правило, добавляем @retention (hareverentpolicy.runtime) метанотация к пользовательским аннотациям. Таким образом, во время программы мы можем получить некоторую информацию о аннотации посредством размышлений. Для получения инструкций по рефлексии вы можете просмотреть эту статью.
открытый класс AnnotationTest {public static void main (string [] args) {resolvAssannotationInfo (annotationDemo.class); ResolveFieldAnnotationInfo (AnnotationDemo.class); ResolvemethodannotationInfo (AnnotationDemo.class); } частная статическая void resolveClassannotationInfo (class <?> clz) {// определить, имеет ли этот класс аннотация classInfo if (clz.isannotationpresent (classinfo.class)) {classinfo classinfo = (classinfo) clz.getannotation (classinfo.class); System.out.println (classinfo.author () + "" + classinfo.comments () + "" + classinfo.date ()); }} private static void resolveFieldantationInfo (class <?> clz) {field [] fields = clz.getDeclaredFields (); for (Field Field: Fields) {if (field.isannotationpresent (fieldinfo.class)) {fieldinfo fieldinfo = (fieldinfo) field.getannotation (fieldinfo.class); System.out.println (fieldInfo.Type () + "" + fieldInfo.name ()); }}} private static void ResolvemethodannotationInfo (class <?> clz) {method [] method = clz.getDeclaredMethods (); для (метод метода: методы) {if (method.isannotationpresent (methodInfo.class)) {methodInfo methodInfo = (methodInfo) method.getAnnotation (methodInfo.class); System.out.println (methodInfo.name () + "" + methodInfo.description ()); }}}}Отражение для получения поля/метода в классе и т. Д., И получить соответствующие аннотации через Getannotation () или getannotations (). Вы можете получить конкретную информацию, получив конкретные аннотации.
Вывод результата прогона заключается в следующем:
Рисунок-1 Диаграмма результатов работы
Суммировать
Для начинающих Java и даже разработчиков Java с определенным опытом, они могут иметь меньшую подверженность аннотациям Java. В действительности, аннотации редко используются, но они часто увидят их в коде. Эта статья-простое введение в аннотации, и, по крайней мере, на уровне кода, она не имеет напряжения для чтения.
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.