logo

Java anotácie

Java Anotácia je značka, ktorá predstavuje metaúdaje t. j. pripojené s triedou, rozhraním, metódami alebo poľami na označenie niektorých dodatočných informácií, ktoré môže použiť kompilátor java a JVM.

Anotácie v jazyku Java sa používajú na poskytovanie dodatočných informácií, takže ide o alternatívnu možnosť pre rozhrania XML a Java markerov.

Najprv sa naučíme niektoré vstavané anotácie a potom prejdeme na vytváranie a používanie vlastných anotácií.


Zabudované anotácie Java

V Jave je zabudovaných niekoľko anotácií. Niektoré anotácie sa aplikujú na kód Java a niektoré na iné anotácie.

Zabudované anotácie Java používané v kóde Java

  • @Prepísať
  • @SuppressWarnings
  • @Zastarané

Zabudované anotácie Java používané v iných anotáciách

  • @Target
  • @Retention
  • @Zdedené
  • @Dokumentované

Pochopenie vstavaných anotácií

Najprv pochopme vstavané anotácie.

@Prepísať

Anotácia @Override zaisťuje, že metóda podtriedy prepíše metódu nadradenej triedy. Ak tomu tak nie je, dôjde k chybe v čase kompilácie.

Niekedy robíme hlúpe chyby, ako sú pravopisné chyby atď. Preto je lepšie označiť anotáciu @Override, ktorá poskytuje istotu, že metóda bude prepísaná.

css stredové tlačidlo
 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(); }} 
Vyskúšajte to
 Output:Comple Time Error 

@SuppressWarnings

Anotácia @SuppressWarnings: používa sa na potlačenie upozornení vydaných kompilátorom.

 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); }} 
Vyskúšajte to
 Now no warning at compile time. 

Ak odstránite anotáciu @SuppressWarnings('unchecked'), zobrazí sa varovanie v čase kompilácie, pretože používame negenerickú kolekciu.


@Zastarané

@Zastaraná anotácia označuje, že táto metóda je zastaraná, takže kompilátor vypíše varovanie. Informuje používateľa, že môže byť v budúcich verziách odstránený. Preto je lepšie nepoužívať takéto metódy.

sql dátové typy
 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(); }} 
Vyskúšajte to

V čase kompilácie:

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

Pri spustení:

 hello n 

Vlastné anotácie Java

Vlastné anotácie Java alebo Java Používateľom definované anotácie sa ľahko vytvárajú a používajú. The @rozhranie prvok sa používa na deklarovanie anotácie. Napríklad:

 @interface MyAnnotation{} 

Tu je MyAnnotation názov vlastnej anotácie.

Body na zapamätanie pre podpis vlastnej anotácie Java

Existuje niekoľko bodov, ktoré by si mal programátor zapamätať.

  1. Metóda by nemala mať žiadne klauzuly throws
  2. Metóda by mala vrátiť jedno z nasledujúcich: primitívne dátové typy, String, Class, enum alebo pole týchto dátových typov.
  3. Metóda by nemala mať žiadny parameter.
  4. Mali by sme pripojiť @ tesne pred kľúčové slovo rozhrania, aby sme definovali anotáciu.
  5. Metóde môže priradiť predvolenú hodnotu.

Typy anotácií

Existujú tri typy anotácií.

  1. Anotácia značky
  2. Anotácia s jednou hodnotou
  3. Viachodnotová anotácia
Typy anotácií Java

1) Anotácia značky

Anotácia, ktorá nemá žiadnu metódu, sa nazýva anotácia značky. Napríklad:

 @interface MyAnnotation{} 

@Override a @Deprecated sú anotácie značky.


2) Anotácia s jednou hodnotou

Anotácia, ktorá má jednu metódu, sa nazýva anotácia s jednou hodnotou. Napríklad:

 @interface MyAnnotation{ int value(); } 

Môžeme poskytnúť aj predvolenú hodnotu. Napríklad:

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

Ako použiť anotáciu s jednou hodnotou

Pozrime sa na kód na použitie anotácie s jednou hodnotou.

prevod reťazca na celé číslo v jazyku Java
 @MyAnnotation(value=10) 

Hodnota môže byť akákoľvek.


3) Viachodnotová anotácia

Anotácia, ktorá má viac ako jednu metódu, sa nazýva viachodnotová anotácia. Napríklad:

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

Môžeme poskytnúť aj predvolenú hodnotu. Napríklad:

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

Ako použiť viachodnotovú anotáciu

Pozrime sa na kód na použitie anotácie s viacerými hodnotami.

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

Vstavané anotácie používané vo vlastných anotáciách v jazyku Java

  • @Target
  • @Retention
  • @Zdedené
  • @Dokumentované

@Target

@Target značka sa používa na určenie typu, pri ktorom sa anotácia použije.

Anotácia java.lang. ElementType enum deklaruje veľa konštánt na určenie typu prvku, na ktorý sa má použiť anotácia, ako napríklad TYPE, METHOD, FIELD atď. Pozrime sa na konštanty Enum ElementType:

np.sum
Typy prvkovKde možno použiť anotáciu
TYPtrieda, rozhranie alebo enumerácia
LÚKApoliach
METÓDAmetódy
KONŠTRUKTORkonštruktérov
LOCAL_VARIABLElokálne premenné
ANNOTATION_TYPEtyp anotácie
PARAMETERparameter

Príklad na zadanie anotácie pre triedu

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

Príklad na zadanie anotácie pre triedu, metódy alebo polia

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

@Retention

@Retention anotácia sa používa na určenie úrovne anotácie, ktorá bude dostupná.

RetentionPolicyDostupnosť
RetentionPolicy.SOURCEodkazuje na zdrojový kód, ktorý sa počas kompilácie zahodí. Nebude k dispozícii v kompilovanej triede.
RetentionPolicy.CLASSodkazuje na súbor .class, dostupný pre kompilátor java, ale nie pre JVM . Je súčasťou súboru triedy.
RetentionPolicy.RUNTIMEodkazuje na runtime, dostupný pre kompilátor java a JVM .

Príklad na špecifikovanie RetentionPolicy

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

Príklad vlastnej anotácie: vytvorenie, použitie a prístup k anotácii

Pozrime sa na jednoduchý príklad vytvárania, aplikácie a prístupu k anotácii.

Súbor: 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()); }} 
Vyskúšajte to
 Output:value is: 10 

stiahnite si tento príklad

Ako sa používajú vstavané anotácie v reálnom scenári?

V skutočnom scenári potrebuje programátor Java iba použiť anotáciu. Nepotrebuje vytvárať a pristupovať k anotácii. Vytváranie a sprístupňovanie anotácie vykonáva poskytovateľ implementácie. V mene anotácie vykoná kompilátor java alebo JVM niektoré ďalšie operácie.


@Zdedené

V predvolenom nastavení sa anotácie nededia do podtried. Anotácia @Inherited označuje anotáciu, ktorá sa má zdediť do podtried.

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

@Dokumentované

@Documented Označuje anotáciu na zahrnutie do dokumentácie.