Аннотации 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(); ) ) 

Вывод

 Я собака. 

В этом примере метод 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

  1. @Deprecated
  2. @Override
  3. @SuppressWarnings
  4. @SafeVarargs
  5. @FunctionalInterface

2. Meta-annotations

  1. @Retention
  2. @Documented
  3. @Target
  4. @Inherited
  5. @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.

Интересные статьи...