Простые аннотации Java
JDK5 предоставляет только три простых типа аннотаций. Эти три используются для предотвращения ошибок или предоставления напоминаний, а именно:
1.Переопределить
2.Устарело
3. Подавление предупреждений
Важно отметить, что JDK5 (другой термин, Tiger) на самом деле не имеет большого количества встроенных аннотаций, вместо этого он позволяет ядру Java поддерживать возможности функций аннотаций. В JSR-175 строго указано, что он используется. определить функции метаданных. Его должен написать программист. Пользовательские типы аннотаций, другие стандарты JSR также написали ряд стандартных типов аннотаций. Ниже будут использованы примеры для подробного объяснения этих трех простых аннотаций.
Переопределить аннотацию
Аннотация Override указывает, что аннотированный метод должен переопределить метод в суперклассе.
Если метод использует эту аннотацию, но не переопределяет метод в суперклассе (например, неверная капитализация, неправильные параметры или метод определен самим подклассом), компилятор выдаст ошибку.
(Примечание. Аннотации переопределения нельзя использовать в JRE5 при реализации методов в интерфейсах. JRE6 позволяет это. JRE5 часто сообщает об этой ошибке).
Пример 1 демонстрирует переопределение аннотаций:
Пример аннотации Java 1:
Скопируйте код кода следующим образом:
общественный класс Test_Override {
@Override
публичная строка toString() {
return super.toString() + «Проверить с использованием аннотации «Переопределить»»;
}
}
Что произойдет, если имя метода написано с ошибкой? Например, если вы переименуете метод toString в «tostring» (все строчные буквы), при компиляции вы получите сообщение об ошибке, подобное следующему:
Скопируйте код кода следующим образом:
Компиляция 1 исходного файла в папку D:tempNew (2)
TestJavaApplication1buildclasses
D:tempНовая папка (2)TestJavaApplication1srctest
myannotationTest_Override.java:24: метод не переопределяет
метод из своего суперкласса
@Override
1 ошибка
СБОРКА НЕ удалась (общее время: 0 секунд)
Конечно, Eclipse напрямую сообщит о красном кресте. Теперь, когда IDE стали очень простыми в использовании, новичкам не следует связываться с командной строкой JDK.
Устаревшая аннотация
Эта аннотация указывает, что компилятор должен отображать предупреждающее сообщение, если программа вызывает устаревший (устаревший, устаревший, устаревший) элемент. В примере 2 показано, как использовать аннотацию «Устарело».
Пример аннотации Java 2
Сначала создайте класс и отметьте метод как устаревший следующим образом:
Скопируйте код кода следующим образом:
общественный класс Test_Deprecated {
@Устарело
общественная недействительность doSomething() {
System.out.println("Тестирование с использованием устаревшей аннотации: 'Устарело'");
}
}
Далее попробуйте вызвать этот метод из другого класса:
Скопируйте код кода следующим образом:
общественный класс TestAnnotations {
public static void main(String arg[]) выдает исключение {
новые TestAnnotations();
}
общественные TestAnnotations() {
Test_Deprecated t2 = новый Test_Deprecated();
т2.doSomething();
}
Метод doSomething() в этом примере объявлен как устаревший. Поэтому в обычных обстоятельствах этот метод не должен вызываться. При компиляции файла Test_Deprecated.java компилятор не выдает никаких предупреждений. Будет выдано предупреждающее сообщение, подобное этому (Eclipse предупредит):
Скопируйте код кода следующим образом:
Компиляция 1 исходного файла в папку D:tempNew.
(2) Классы сборки TestJavaApplication1
D:tempНовая папка
(2) TestJavaApplication1srctestmyannotation
ТестАннотации.java:27:
предупреждение: [устарело] doSomething() в
test.myannotation.Test_Deprecated устарел
т2.doSomething();
1 предупреждение
Подавить аннотации предупреждений
Эта аннотация сообщает компилятору, что предупреждающие сообщения для аннотированного элемента и всех подэлементов должны быть подавлены. Все предупреждающие сообщения для набора элементов и подэлементов будут подавлены. Например, предположим, что вы используете аннотацию Suppresswarnings для класса. подавить предупреждение. Если вы используете аннотацию Suppresswarnings для одного метода для подавления другого предупреждения, оба предупреждения будут подавлены на уровне метода. См. пример 3.
Пример аннотации Java 3:
Скопируйте код кода следующим образом:
общественный класс TestAnnotations {
public static void main(String arg[]) выдает исключение {
новые TestAnnotations().doSomeTestNow();
}
@SuppressWarnings({"устарело"})
общественная недействительность doSomeTestNow () {
Test_Deprecated t2 = новый Test_Deprecated();
т2.doSomething();
}
}
В этом примере @SuppressWarnings используется для подавления предупреждающего сообщения об устаревании, показанное в примере 2. Поскольку этот тип предупреждения для этого метода подавляется, вы больше не увидите предупреждение об устаревании.
Примечание. Лучше использовать эту аннотацию для самого внутреннего элемента. Поэтому, если вы хотите подавить предупреждение только для определенного метода, вам следует аннотировать его в методе, а не использовать аннотацию в классе.
Мета-аннотации (тип аннотации Java)
Мета-аннотации, которые на самом деле называются аннотациями, включают четыре типа.
1. Цель
2. Удержание
3.Документировано
4.Наследственный
Целевая аннотация
Аннотация Target указывает, к какому целевому элементу применяется тип аннотации. Она содержит следующие значения типа перечисления:
1.@Target(ElementType.TYPE) — может применяться к элементам любого класса.
2.@Target(ElementType.FIELD) — применяется только к полям или свойствам.
3.@Target(ElementType.METHOD) — применимо только к аннотациям методов.
4.@Target(ElementType.PARAMETER) — применяется только к параметрам метода.
5.@Target(ElementType.CONSTRUCTOR) — применимо только к конструкторам.
6.@Target(ElementType.LOCAL_VARIABLE) — применимо только к локальным переменным.
7.@Target(ElementType.ANNOTATION_TYPE) — — указывает, что объявленный тип сам по себе является типом аннотации.
Пример 4 демонстрирует аннотацию Target:
Пример аннотации Java 4
Сначала определяется тип аннотации с именем Test_Target с метааннотацией @Target, как показано ниже:
Скопируйте код кода следующим образом:
@Target(ТипЭлемента.МЕТОД)
общественный @interface Test_Target {
публичная строка doTestTarget();
}
Затем создайте класс, который будет помечен Test_Target:
Скопируйте код кода следующим образом:
общественный класс TestAnnotations {
public static void main(String arg[]) {
новый TestAnnotations().doTestTarget();
}
// Используйте аннотации к методам, ОК.
// Не может быть разрывов строк посередине, 2 строки и т. д. Java игнорирует лишние разрывы строк.
@Test_Target(doTestTarget="Привет, мир!")
общественный недействительный doTestTarget() {
System.out.printf("Аннотация цели тестирования");
}
}
Аннотация @Target(ElementType.METHOD) указывает, что тип аннотации можно использовать только для аннотирования методов. Если вы скомпилируете этот код, предупреждающее сообщение отображаться не будет. Однако что произойдет, если эта аннотация будет объявлена для строковой переменной? Что? Вот так:
Скопируйте код кода следующим образом:
общественный класс TestAnnotations {
// Это неправильный подход, и компиляция не пройдет, поскольку аннотация находится на неправильном уровне.
// Мета-аннотации указывают, что аннотировать можно только методы, и их нельзя использовать для аннотирования свойств.
@Test_Target(doTestTarget="Привет, мир!")
частная строка ул;
public static void main(String arg[]) {
новый TestAnnotations().doTestTarget();
}
общественный недействительный doTestTarget() {
System.out.printf("Аннотация цели тестирования");
}
}
Единственное изменение заключается в том, что объявление аннотации перемещается с уровня метода на уровень поля, что неверно. Поскольку вы определили, что аннотация @Test_Target применяется только на уровне метода, если вы попытаетесь скомпилировать этот класс, вы можете получить ошибку. такое сообщение:
Скопируйте код кода следующим образом:
"TestAnnotations.java":
D:R_AND_DTestAnnotationsrctestmyannotation
ТестАннотации.java:16:
тип аннотации не применим к этому типу объявления в строке
16, столбец 0
@Test_Target(doTestTarget="Привет, мир!")
^
Ошибка компиляции javac.