Аннотация к хранению
Аннотация «Хранение» указывает, на каком этапе будет сохраняться этот тип аннотации. Существует три значения:
1.RetentionPolicy.SOURCE — аннотации этого типа сохраняются только на уровне исходного кода и будут игнорироваться во время компиляции.
2.RetentionPolicy.CLASS — этот тип аннотаций сохраняется во время компиляции и существует в файле класса, но JVM будет его игнорировать.
3.RetentionPolicy.RUNTIME — аннотации этого типа будут сохраняться JVM, поэтому их можно будет читать и использовать JVM или другим кодом с использованием механизма отражения во время выполнения.
Пример 5 демонстрирует объявление RetentionPolicy.RUNTIME:
Пример 1 аннотаций Java:
Скопируйте код кода следующим образом:
@Retention(RetentionPolicy.RUNTIME)
общественный @interface Test_Retention {
Строка doTestRetention();
}
В этом примере аннотация @Retention(RetentionPolicy.RUNTIME) указывает, что аннотация Test_Retention будет сохранена виртуальной машиной, чтобы ее можно было прочитать посредством отражения во время выполнения.
Документированные аннотации
Документированная аннотация указывает, что эта аннотация должна быть записана инструментом javadoc. По умолчанию javadoc не включает аннотации. Но если при объявлении аннотации указан @Documented, она будет обработана такими инструментами, как javadoc, поэтому информация о типе аннотации будет обработана. также будет включен в созданную документацию. Пример 6 дополнительно демонстрирует использование @Documented:
Пример 2 аннотаций Java:
Скопируйте код кода следующим образом:
@Документировано
общественный @interface Test_Documented {
Строка doTestDocument();
}
Затем измените класс TestAnnotations следующим образом:
Скопируйте код кода следующим образом:
общественный класс TestAnnotations {
public static void main(String arg[]) {
новые TestAnnotations().doSomeTestRetention();
новые TestAnnotations().doSomeTestDocumented();
}
@Test_Retention (doTestRetention="Тест сохранения информации аннотаций")
общественный недействительный doSomeTestRetention () {
System.out.printf("Тестовый тип аннотации "Сохранение"");
}
@Test_Documented(doTestDocument="Привет, документ")
общественный недействительный doSomeTestDocumented () {
System.out.printf("Тип тестовой аннотации "Документировано"");
}
}
Теперь, если вы используете команду javadoc для создания файла TestAnnotations.html, вы увидите результаты, аналогичные рис. 1.
Как видно на снимке экрана, в документе нет метода информации о типе аннотации () метода doSomeTestRetention(). Однако документ метода doSomeTestDocumented() предоставляет информацию описания аннотации. Тег @Documented добавляется к аннотации Test_Documented. В предыдущей аннотации Test_Retention не указан тег @Documented.
Унаследованная аннотация (возможно, с этим абзацем что-то не так...)
Это немного более сложный тип аннотации. Он указывает, что аннотированный класс будет автоматически наследоваться, если при определении аннотации используется тег @Inherited, а затем определенная аннотация используется для аннотации другого родительского класса, родительского класса. имеет подкласс A, то все свойства родительского класса будут унаследованы в его подкласс. В примере 7 вы увидите преимущества использования тега @Inherited.
Пример 3 аннотаций Java
Сначала определите свою аннотацию:
Скопируйте код кода следующим образом:
@Унаследовано
общественный @interface MyParentObject {
логическое значение isInherited() по умолчанию true;
String doSomething() default "Что делать?";
}
Далее класс аннотируется аннотациями:
Скопируйте код кода следующим образом:
@MyParentObject
общественный класс MyChildObject {
}
Как видите, вам не нужно определять методы интерфейса в классе реализации. Благодаря тегу @Inherited они автоматически наследуются. Как бы это выглядело, если бы вы использовали древний способ определения класса реализации? посмотрите ниже. Это древняя реализация:
Скопируйте код кода следующим образом:
публичный класс MyChildObject реализует MyParentObject {
общедоступное логическое значение isInherited() {
вернуть ложь;
}
публичная строка doSomething() {
возвращаться "";
}
общественное логическое равенство (Object obj) {
вернуть ложь;
}
общественный int hashCode() {
вернуть 0;
}
публичная строка toString() {
возвращаться "";
}
публичный класс annotationType() {
вернуть ноль;
}
}
Видите разницу? Как видите, вам нужно реализовать все методы родительского интерфейса. Помимо методов isInherited() и doSomething() из myParentObject, вам также необходимо реализовать методыquals(), toString(. ) и метод hasCode() Существует также метод annotationType() класса java.lang.annotation.Annotation. Независимо от того, хотите ли вы реализовать эти методы, вы должны включить их в унаследованный объект.
в заключение
В этой статье показано, как упростить разработку с помощью функции аннотаций JDK5. Аннотации не влияют напрямую на семантику программы. Инструменты разработки и развертывания могут читать эти аннотации и обрабатывать их, используя программу, содержащую аннотации. могут заменить дополнительные исходные файлы Java, документы XML или другие древние артефакты. Использование аннотаций позволяет добиться того же самого с меньшим количеством кода и обеспечивает лучшее обнаружение ошибок во время компиляции. Цель аннотаций — тратить меньше времени на сложные и бесполезные детали и больше сосредоточиться на правилах бизнес-логики. Эта статья — первая часть серии аннотаций Java. Во второй части вы узнаете, как использовать аннотации для разработки простых приложений. Веб-приложение Наконец, в третьей части вы увидите сложный пример, включающий несколько таблиц базы данных.