В этом руководстве мы узнаем, что такое аннотации, различные аннотации 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(); ) )
Вывод
Я собака.
В этом примере метод displayInfo()
присутствует как в суперклассе Animal, так и в подклассе Dog. Когда вызывается этот метод, вместо метода суперкласса вызывается метод подкласса.
Форматы аннотаций
Аннотации могут также включать элементы (элементы / атрибуты / параметры).
1. Аннотации маркеров
Аннотации маркеров не содержат членов / элементов. Он используется только для обозначения декларации.
Его синтаксис:
@AnnotationName ()
Поскольку эти аннотации не содержат элементов, скобки можно исключить. Например,
@Override
2. Одноэлементные аннотации
Аннотация с одним элементом содержит только один элемент.
Его синтаксис:
@AnnotationName (elementName = "elementValue")
Если есть только один элемент, принято называть этот элемент значением.
@AnnotationName (значение = "elementValue")
В этом случае можно исключить и имя элемента. Имя элемента будет значением по умолчанию.
@AnnotationName ("elementValue")
3. Аннотации с несколькими элементами
Эти аннотации содержат несколько элементов, разделенных запятыми.
Его синтаксис:
@AnnotationName (element1 = "значение1", element2 = "значение2")
Размещение аннотации
Любое объявление можно пометить аннотацией, поместив его над этим объявлением. Начиная с 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(); ) )
Вывод
Список слов => (programiz)
Если указанная выше программа скомпилирована без использования @SuppressWarnings("unchecked")
аннотации, компилятор все равно скомпилирует программу, но будет выдавать такие предупреждения, как:
Main.java использует неотмеченные или небезопасные операции. Список слов => (programiz)
Мы получаем предупреждение
Main.java использует непроверенные или небезопасные операции
из-за следующего утверждения.
ArrayList wordList = new ArrayList();
This is because we haven't defined the generic type of the array list. We can fix this warning by specifying generics inside angle brackets .
ArrayList wordList = new ArrayList();
2. Type annotations
Before Java 8, annotations could be applied to declarations only. Now, type annotations can be used as well. This means that we can place annotations wherever we use a type.
Constructor invocations
new @Readonly ArrayList()
Type definitions
@NonNull String str;
This declaration specifies non-null variable str of type String
to avoid NullPointerException
.
@NonNull List newList;
This declaration specifies a non-null list of type String
.
List newList;
This declaration specifies a list of non-null values of type String
.
Type casts
newStr = (@NonNull String) str;
extends and implements clause
class Warning extends @Localized Message
throws clause
public String readMethod() throws @Localized IOException
Type annotations enable Java code to be analyzed better and provide even stronger type checks.
Types of Annotations
1. Predefined annotations
@Deprecated
@Override
@SuppressWarnings
@SafeVarargs
@FunctionalInterface
2. Meta-annotations
@Retention
@Documented
@Target
@Inherited
@Repeatable
3. Custom annotations
These annotation types are described in detail in the Java Annotation Types tutorial.
Use of Annotations
- Compiler instructions - Annotations can be used for giving instructions to the compiler, detect errors or suppress warnings. The built-in annotations
@Deprecated
,@Override
,@SuppressWarnings
are used for these purposes. - Compile-time instructions - Compile-time instructions provided by these annotations help the software build tools to generate code, XML files and many more.
- Инструкции во время выполнения - некоторые аннотации могут быть определены для предоставления инструкций программе во время выполнения. Доступ к этим аннотациям осуществляется с помощью Java Reflection.