Java-аннотации
Аннотации Java
В этом руководстве мы узнаем, что такое аннотации, разные аннотации Java и как их использовать с помощью примеров.
Аннотации Java — это метаданные (данные о данных) для исходного кода нашей программы.
Они предоставляют компилятору дополнительную информацию о программе, но не являются частью самой программы. Эти аннотации не влияют на выполнение скомпилированной программы.
Аннотации начинаются с @
. Его синтаксис:
@AnnotationName<час>
Возьмем пример @Override
аннотация.
@Override
аннотация указывает, что метод, отмеченный этой аннотацией, переопределяет метод суперкласса с тем же именем метода, типом возвращаемого значения и списком параметров.
Не обязательно использовать @Override
при переопределении метода. Однако, если мы его используем, компилятор выдает ошибку, если что-то не так (например, неправильный тип параметра) при переопределении метода.
Пример 1:Пример аннотации @Override
class Animal {
public void displayInfo() {
System.out.println("I am an animal.");
}
}
class Dog extends Animal {
@Override
public void displayInfo() {
System.out.println("I am a dog.");
}
}
class Main {
public static void main(String[] args) {
Dog d1 = new Dog();
d1.displayInfo();
}
}
Вывод
I am a dog.
В этом примере метод displayInfo()
присутствует как в суперклассе Animal и подкласс Собака . При вызове этого метода вместо метода суперкласса вызывается метод подкласса.
Форматы аннотаций
Аннотации также могут включать элементы (элементы/атрибуты/параметры).
1. Аннотации маркеров
Аннотации маркеров не содержат членов/элементов. Он используется только для обозначения объявления.
Его синтаксис:
@AnnotationName()
Поскольку эти аннотации не содержат элементов, круглые скобки можно исключить. Например,
@Override<час>
2. Аннотации отдельных элементов
Аннотация с одним элементом содержит только один элемент.
Его синтаксис:
@AnnotationName(elementName = "elementValue")
Если есть только один элемент, принято называть этот элемент как value. .
@AnnotationName(value = "elementValue")
В этом случае можно исключить и имя элемента. Имя элемента будет value по умолчанию.
@AnnotationName("elementValue")<час>
3. Аннотации нескольких элементов
Эти аннотации содержат несколько элементов, разделенных запятыми.
Его синтаксис:
@AnnotationName(element1 = "value1", element2 = "value2")<час>
Размещение аннотации
Любое объявление можно пометить аннотацией, поместив ее над этим объявлением. Начиная с Java 8 аннотации также можно размещать перед типом.
1. Над объявлениями
Как упоминалось выше, аннотации Java можно размещать над объявлениями классов, методов, интерфейсов, полей и других элементов программы.
Пример 2:Пример аннотации @SuppressWarnings
import java.util.*;
class Main {
@SuppressWarnings("unchecked")
static void wordsList() {
ArrayList wordList = new ArrayList<>();
// This causes an unchecked warning
wordList.add("programiz");
System.out.println("Word list => " + wordList);
}
public static void main(String args[]) {
wordsList();
}
}
Вывод
Word list => [programiz]
Если приведенная выше программа скомпилирована без использования @SuppressWarnings("unchecked")
аннотацию, компилятор все равно скомпилирует программу, но выдаст предупреждения типа:
Main.java uses unchecked or unsafe operations. Word list => [programiz]
Мы получаем предупреждение
Main.java uses unchecked or unsafe operations
из-за следующего утверждения.
ArrayList wordList = new ArrayList<>();
Это потому, что мы не определили универсальный тип списка массивов. Мы можем исправить это предупреждение, указав дженерики внутри угловых скобок <>
. .
ArrayList<String> wordList = new ArrayList<>();<час>
2. Введите аннотации
До Java 8 аннотации можно было применять только к объявлениям. Теперь можно использовать и аннотации типов. Это означает, что мы можем размещать аннотации везде, где используем тип.
Вызов конструктора
new @Readonly ArrayList<>()
Определения типов
@NonNull String str;
В этом объявлении указана ненулевая переменная str. типа String
чтобы избежать NullPointerException
.
@NonNull List<String> newList;
Это объявление определяет ненулевой список типа String
. .
List<@NonNull String> newList;
Это объявление указывает список ненулевых значений типа String
. .
Приведение типов
newStr = (@NonNull String) str;
расширяет и реализует пункт
class Warning extends @Localized Message
выбрасывает предложение
public String readMethod() throws @Localized IOException
Аннотации типов позволяют лучше анализировать код Java и обеспечивают еще более строгие проверки типов.
<час>Типы аннотаций
1. Предопределенные аннотации
@Deprecated
@Override
@SuppressWarnings
@SafeVarargs
@FunctionalInterface
2. Мета-аннотации
@Retention
@Documented
@Target
@Inherited
@Repeatable
3. Пользовательские аннотации
Эти типы аннотаций подробно описаны в руководстве по типам аннотаций Java.
<час>Использование аннотаций
- Инструкции по компиляции - Аннотации можно использовать для предоставления инструкций компилятору, обнаружения ошибок или подавления предупреждений. Встроенные аннотации
@Deprecated
,@Override
,@SuppressWarnings
используются для этих целей. - Инструкции во время компиляции – Инструкции во время компиляции, предоставляемые этими аннотациями, помогают инструментам сборки программного обеспечения генерировать код, XML-файлы и многое другое.
- Инструкции по выполнению - Некоторые аннотации могут быть определены для предоставления инструкций программе во время выполнения. Доступ к этим аннотациям осуществляется с помощью Java Reflection.
java