Анотації 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 (value = "elementValue") 

У цьому випадку також можна виключити назву елемента. За замовчуванням ім'я елемента буде значенням.

 @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(); ) ) 

Вихідні дані

 Список слів => (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.

Цікаві статті...