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ć.
- Metoda nie powinna zawierać żadnych klauzul rzutów
- 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.
- Metoda nie powinna mieć żadnego parametru.
- Powinniśmy dołączyć @ tuż przed słowem kluczowym interfejs, aby zdefiniować adnotację.
- Może przypisać metodzie wartość domyślną.
Rodzaje adnotacji
Istnieją trzy typy adnotacji.
- Adnotacja znacznika
- Adnotacja jednowartościowa
- Adnotacja wielowartościowa
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 ''; String value3() default 'xyz'; }
Jak zastosować adnotację wielowartościową
Zobaczmy kod, aby zastosować adnotację wielowartościową.
@MyAnnotation(value1=10,value2='Arun Kumar',value3='Ghaziabad')
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ów | Gdzie można zastosować adnotację |
---|---|
TYP | klasa, interfejs lub wyliczenie |
POLE | pola |
METODA | metody |
KONSTRUKTOR | konstruktorzy |
ZMIENNA LOKALNA | zmienne lokalne |
TYP ANNOTATION_TYPE | typ adnotacji |
PARAMETR | parametr |
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 przechowywania | Dostępność |
---|---|
RetentionPolicy.SOURCE | odnosi się do kodu źródłowego, odrzuconego podczas kompilacji. Nie będzie dostępny w skompilowanej klasie. |
RetentionPolicy.CLASS | odnosi się do pliku .class, dostępnego dla kompilatora Java, ale nie dla JVM. Jest on zawarty w pliku klasy. |
Zasady przechowywania.RUNTIME | odnosi 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('hello annotation');} } //Accessing annotation class TestCustomAnnotation1{ public static void main(String args[])throws Exception{ Hello h=new Hello(); Method m=h.getClass().getMethod('sayHello'); MyAnnotation manno=m.getAnnotation(MyAnnotation.class); System.out.println('value is: '+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.