logo

Adnotacje w Javie

Jawa Adnotacja jest znacznikiem reprezentującym metadane tj. dołączone do klasy, interfejsu, metod lub pól w celu wskazania dodatkowych informacji, które mogą zostać wykorzystane przez kompilator Java i JVM.

Adnotacje w języku Java służą do dostarczania dodatkowych informacji, dlatego jest to alternatywna opcja dla interfejsów znaczników XML i Java.

Najpierw poznamy kilka wbudowanych adnotacji, a następnie przejdziemy do tworzenia i używania niestandardowych adnotacji.


Wbudowane adnotacje Java

W Javie istnieje kilka wbudowanych adnotacji. Niektóre adnotacje są stosowane do kodu Java, a inne do innych adnotacji.

Wbudowane adnotacje Java używane w kodzie Java

  • @Nadpisanie
  • @Tłumić ostrzeżenia
  • @Przestarzałe

Wbudowane adnotacje Java używane w innych adnotacjach

  • @Cel
  • @Zatrzymanie
  • @Dziedziczny
  • @Udokumentowane

Zrozumienie wbudowanych adnotacji

Przyjrzyjmy się najpierw wbudowanym adnotacjom.

@Nadpisanie

Adnotacja @Override zapewnia, że ​​metoda podklasy zastępuje metodę klasy nadrzędnej. Jeśli tak nie jest, wystąpi błąd czasu kompilacji.

Czasami popełniamy głupi błąd, taki jak błędy ortograficzne itp. Lepiej więc zaznaczyć adnotację @Override, która zapewnia, że ​​metoda zostanie nadpisana.

klasa obiektu w Javie
 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(); }} 
Przetestuj teraz
 Output:Comple Time Error 

@Tłumić ostrzeżenia

Adnotacja @SuppressWarnings: służy do pomijania ostrzeżeń wydawanych przez kompilator.

 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); }} 
Przetestuj teraz
 Now no warning at compile time. 

Jeśli usuniesz adnotację @SuppressWarnings('unchecked'), w czasie kompilacji wyświetli się ostrzeżenie, ponieważ używamy kolekcji nieogólnej.


@Przestarzałe

Adnotacja @Deprecated oznacza, że ​​ta metoda jest przestarzała, więc kompilator wyświetla ostrzeżenie. Informuje użytkownika, że ​​może zostać usunięty w przyszłych wersjach. Lepiej więc nie stosować takich metod.

testowanie i typy oprogramowania
 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(); }} 
Przetestuj teraz

W czasie kompilacji:

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

W czasie wykonywania:

 hello n 

Niestandardowe adnotacje Java

Niestandardowe adnotacje Java lub Java Adnotacje zdefiniowane przez użytkownika są łatwe w tworzeniu i użyciu. The @interfejs element służy do deklarowania adnotacji. Na przykład:

 @interface MyAnnotation{} 

Tutaj MyAnnotation jest niestandardową nazwą adnotacji.

Punkty do zapamiętania dotyczące niestandardowego podpisu adnotacji Java

Jest kilka punktów, o których programista powinien pamiętać.

  1. Metoda nie powinna zawierać żadnych klauzul rzutów
  2. Metoda powinna zwrócić jeden z następujących typów danych: pierwotne typy danych, ciąg znaków, klasę, wyliczenie lub tablicę tych typów danych.
  3. Metoda nie powinna mieć żadnego parametru.
  4. Powinniśmy dołączyć @ tuż przed słowem kluczowym interfejs, aby zdefiniować adnotację.
  5. Może przypisać metodzie wartość domyślną.

Rodzaje adnotacji

Istnieją trzy typy adnotacji.

  1. Adnotacja znacznika
  2. Adnotacja jednowartościowa
  3. Adnotacja wielowartościowa
Typy adnotacji Java

1) Adnotacja znacznika

Adnotacja, która nie ma metody, nazywana jest adnotacją znacznika. Na przykład:

r w programowaniu c
 @interface MyAnnotation{} 

@Override i @Deprecated są adnotacjami znaczników.


2) Adnotacja jednowartościowa

Adnotacja posiadająca jedną metodę nazywana jest adnotacją jednowartościową. Na przykład:

 @interface MyAnnotation{ int value(); } 

Możemy również podać wartość domyślną. Na przykład:

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

Jak zastosować adnotację jednowartościową

Zobaczmy kod, w którym można zastosować adnotację o pojedynczej wartości.

 @MyAnnotation(value=10) 

Wartość może być dowolna.


3) Adnotacja wielowartościowa

Adnotacja posiadająca więcej niż jedną metodę nazywana jest adnotacją wielowartościową. Na przykład:

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

Możemy również podać wartość domyślną. Na przykład:

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

Jak zastosować adnotację wielowartościową

Zobaczmy kod, aby zastosować adnotację wielowartościową.

 @MyAnnotation(value1=10,value2=&apos;Arun Kumar&apos;,value3=&apos;Ghaziabad&apos;) 

Wbudowane adnotacje używane w niestandardowych adnotacjach w Javie

  • @Cel
  • @Zatrzymanie
  • @Dziedziczny
  • @Udokumentowane

@Cel

@Cel tag służy do określenia typu, w którym używana jest adnotacja.

Adnotacja java.lang. Typ elementu enum deklaruje wiele stałych określających typ elementu, w którym ma zostać zastosowana adnotacja, np. TYPE, METOD, FIELD itp. Zobaczmy stałe wyliczenia ElementType:

Typy elementówGdzie można zastosować adnotację
TYPklasa, interfejs lub wyliczenie
POLEpola
METODAmetody
KONSTRUKTORkonstruktorzy
ZMIENNA LOKALNAzmienne lokalne
TYP ANNOTATION_TYPEtyp adnotacji
PARAMETRparametr

Przykład określenia adnotacji dla klasy

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

Przykład określenia adnotacji dla klasy, metod lub pól

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

@Zatrzymanie

@Zatrzymanie adnotacja służy do określenia poziomu dostępności adnotacji.

konstruktor strun
Zasady przechowywaniaDostępność
RetentionPolicy.SOURCEodnosi się do kodu źródłowego, odrzuconego podczas kompilacji. Nie będzie dostępny w skompilowanej klasie.
RetentionPolicy.CLASSodnosi się do pliku .class, dostępnego dla kompilatora Java, ale nie dla JVM. Jest on zawarty w pliku klasy.
Zasady przechowywania.RUNTIMEodnosi się do środowiska wykonawczego dostępnego dla kompilatora Java i JVM.

Przykład określenia RetentionPolicy

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

Przykład niestandardowej adnotacji: tworzenie, stosowanie i dostęp do adnotacji

Zobaczmy prosty przykład tworzenia, stosowania i uzyskiwania dostępu do adnotacji.

Plik: 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()); }} 
Przetestuj teraz
 Output:value is: 10 

pobierz ten przykład

Jak wbudowane adnotacje są wykorzystywane w prawdziwym scenariuszu?

W prawdziwym scenariuszu programista Java musi jedynie zastosować adnotację. Nie musi tworzyć adnotacji ani uzyskiwać do niej dostępu. Tworzenie adnotacji i uzyskiwanie do nich dostępu jest wykonywane przez dostawcę implementacji. W imieniu adnotacji kompilator Java lub JVM wykonuje dodatkowe operacje.


@Dziedziczny

Domyślnie adnotacje nie są dziedziczone do podklas. Adnotacja @Inherited oznacza adnotację, która ma być dziedziczona do podklas.

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

@Udokumentowane

@Documented Zaznacza adnotację do włączenia do dokumentacji.