logo

Анотації Java

Java Анотація це тег, який представляє метадані тобто додається з класом, інтерфейсом, методами або полями для вказівки деякої додаткової інформації, яка може бути використана компілятором Java та JVM.

Анотації в Java використовуються для надання додаткової інформації, тому це альтернативний варіант для інтерфейсів маркерів XML і Java.

Спочатку ми вивчимо деякі вбудовані анотації, а потім перейдемо до створення та використання власних анотацій.


Вбудовані анотації Java

У Java є кілька вбудованих анотацій. Деякі анотації застосовуються до коду Java, а деякі – до інших анотацій.

Вбудовані анотації Java, які використовуються в коді Java

  • @Override
  • @SuppressWarnings
  • @Застаріло

Вбудовані анотації Java, які використовуються в інших анотаціях

  • @Target
  • @Retention
  • @Успадковано
  • @Документовано

Розуміння вбудованих анотацій

Давайте спочатку розберемося з вбудованими анотаціями.

@Override

Анотація @Override гарантує, що метод підкласу перекриває метод батьківського класу. Якщо це не так, виникає помилка часу компіляції.

Іноді ми робимо безглузді помилки, наприклад орфографічні помилки тощо. Тому краще позначити анотацію @Override, яка гарантує, що метод перевизначено.

string.substring java
 class Animal{ void eatSomething(){System.out.println('eating something');} } class Dog extends Animal{ @Override void eatsomething(){System.out.println('eating foods');}//should be eatSomething } class TestAnnotation1{ public static void main(String args[]){ Animal a=new Dog(); a.eatSomething(); }} 
Перевірте зараз
 Output:Comple Time Error 

@SuppressWarnings

Анотація @SuppressWarnings: використовується для придушення попереджень, виданих компілятором.

 import java.util.*; class TestAnnotation2{ @SuppressWarnings('unchecked') public static void main(String args[]){ ArrayList list=new ArrayList(); list.add('sonoo'); list.add('vimal'); list.add('ratan'); for(Object obj:list) System.out.println(obj); }} 
Перевірте зараз
 Now no warning at compile time. 

Якщо ви видалите анотацію @SuppressWarnings('unchecked'), під час компіляції буде показано попередження, оскільки ми використовуємо незагальну колекцію.


@Застаріло

Аннотація @Deprecated позначає, що цей метод є застарілим, тому компілятор друкує попередження. Він інформує користувача про те, що він може бути видалений у наступних версіях. Тому такими методами краще не користуватися.

livecricket.is
 class A{ void m(){System.out.println('hello m');} @Deprecated void n(){System.out.println('hello n');} } class TestAnnotation3{ public static void main(String args[]){ A a=new A(); a.n(); }} 
Перевірте зараз

Під час компіляції:

 Note: Test.java uses or overrides a deprecated API. <br> Note: Recompile with -Xlint:deprecation for details. 

Під час виконання:

 hello n 

Спеціальні анотації Java

Спеціальні анотації Java або Java Визначені користувачем анотації легко створювати та використовувати. The @інтерфейс елемент використовується для оголошення анотації. Наприклад:

 @interface MyAnnotation{} 

Тут MyAnnotation — це ім’я спеціальної анотації.

Що слід пам’ятати щодо власного підпису анотації Java

Є кілька моментів, які слід пам'ятати програмісту.

  1. Метод не повинен мати жодних викидів
  2. Метод має повертати одне з наступного: примітивні типи даних, String, Class, enum або масив цих типів даних.
  3. Метод не повинен мати параметрів.
  4. Ми повинні додати @ безпосередньо перед ключовим словом інтерфейсу, щоб визначити анотацію.
  5. Він може призначити методу значення за замовчуванням.

Види анотації

Існує три типи анотацій.

  1. Анотація маркера
  2. Анотація з одним значенням
  3. Багатозначна анотація
Типи анотацій Java

1) Анотація маркера

Анотація, яка не має методу, називається анотацією маркера. Наприклад:

 @interface MyAnnotation{} 

@Override і @Deprecated є анотаціями маркерів.


2) Однозначна анотація

Анотація, яка має один метод, називається анотацією з одним значенням. Наприклад:

 @interface MyAnnotation{ int value(); } 

Ми також можемо надати значення за умовчанням. Наприклад:

 @interface MyAnnotation{ int value() default 0; } 

Як застосувати анотацію з одним значенням

Давайте подивимося код для застосування анотації одного значення.

 @MyAnnotation(value=10) 

Значення може бути будь-яким.

завантажити відео з youtube за допомогою vlc

3) Багатозначна анотація

Анотація, яка має більше одного методу, називається багатозначною анотацією. Наприклад:

 @interface MyAnnotation{ int value1(); String value2(); String value3(); } } 

Ми також можемо надати значення за умовчанням. Наприклад:

 @interface MyAnnotation{ int value1() default 1; String value2() default &apos;&apos;; String value3() default &apos;xyz&apos;; } 

Як застосувати багатозначну анотацію

Давайте подивимося код для застосування багатозначної анотації.

список сортування масивів java
 @MyAnnotation(value1=10,value2=&apos;Arun Kumar&apos;,value3=&apos;Ghaziabad&apos;) 

Вбудовані анотації, які використовуються в користувацьких анотаціях у java

  • @Target
  • @Retention
  • @Успадковано
  • @Документовано

@Target

@Target тег використовується для визначення типу анотації.

Анотація java.lang. ElementType enum оголошує багато констант, щоб визначити тип елемента, до якого буде застосовано анотацію, наприклад TYPE, METHOD, FIELD тощо. Давайте подивимося на константи ElementType enum:

Типи елементівДе можна застосувати анотацію
ТИПклас, інтерфейс або перерахування
ПОЛЕполя
МЕТОДметоди
КОНСТРУКТОРконструктори
LOCAL_VARIABLEлокальні змінні
ANNOTATION_TYPEтип анотації
ПАРАМЕТРпараметр

Приклад визначення анотації для класу

 @Target(ElementType.TYPE) @interface MyAnnotation{ int value1(); String value2(); } 

Приклад визначення анотації для класу, методів або полів

 @Target({ElementType.TYPE, ElementType.FIELD, ElementType.METHOD}) @interface MyAnnotation{ int value1(); String value2(); } 

@Retention

@Retention анотація використовується, щоб визначити, до якого рівня анотація буде доступна.

Політика збереженняДоступність
RetentionPolicy.SOURCEпосилається на вихідний код, відкинутий під час компіляції. Він не буде доступний у скомпільованому класі.
RetentionPolicy.CLASSпосилається на файл .class, доступний для компілятора java, але не для JVM. Він включений у файл класу.
RetentionPolicy.RUNTIMEвідноситься до середовища виконання, доступного компілятору Java та JVM.

Приклад визначення RetentionPolicy

 @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) @interface MyAnnotation{ int value1(); String value2(); } 

Приклад спеціальної анотації: створення, застосування та доступ до анотації

Давайте розглянемо простий приклад створення, застосування та доступу до анотації.

Файл: Test.java

 //Creating annotation import java.lang.annotation.*; import java.lang.reflect.*; @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) @interface MyAnnotation{ int value(); } //Applying annotation class Hello{ @MyAnnotation(value=10) public void sayHello(){System.out.println(&apos;hello annotation&apos;);} } //Accessing annotation class TestCustomAnnotation1{ public static void main(String args[])throws Exception{ Hello h=new Hello(); Method m=h.getClass().getMethod(&apos;sayHello&apos;); MyAnnotation manno=m.getAnnotation(MyAnnotation.class); System.out.println(&apos;value is: &apos;+manno.value()); }} 
Перевірте зараз
 Output:value is: 10 

завантажити цей приклад

Як вбудовані анотації використовуються в реальному сценарії?

У реальному сценарії Java-програмісту потрібно лише застосувати анотацію. Йому/їй не потрібно створювати та отримувати доступ до анотації. Створення та доступ до анотації виконується постачальником впровадження. Від імені анотації компілятор Java або JVM виконує деякі додаткові операції.


@Успадковано

За замовчуванням анотації не успадковуються підкласами. Анотація @Inherited позначає анотацію, яка буде успадкована для підкласів.

 @Inherited @interface ForEveryone { }//Now it will be available to subclass also @interface ForEveryone { } class Superclass{} class Subclass extends Superclass{} 

@Документовано

@Documented Позначає анотацію для включення в документацію.