У цьому підручнику ми дізнаємось, що таке анотації, різні анотації 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
@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.