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ť.
- Metóda by nemala mať žiadne klauzuly throws
- 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.
- Metóda by nemala mať žiadny parameter.
- Mali by sme pripojiť @ tesne pred kľúčové slovo rozhrania, aby sme definovali anotáciu.
- Metóde môže priradiť predvolenú hodnotu.
Typy anotácií
Existujú tri typy anotácií.
- Anotácia značky
- Anotácia s jednou hodnotou
- Viachodnotová anotácia
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 ''; String value3() default 'xyz'; }
Ako použiť viachodnotovú anotáciu
Pozrime sa na kód na použitie anotácie s viacerými hodnotami.
@MyAnnotation(value1=10,value2='Arun Kumar',value3='Ghaziabad')
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 prvkov | Kde možno použiť anotáciu |
---|---|
TYP | trieda, rozhranie alebo enumerácia |
LÚKA | poliach |
METÓDA | metódy |
KONŠTRUKTOR | konštruktérov |
LOCAL_VARIABLE | lokálne premenné |
ANNOTATION_TYPE | typ anotácie |
PARAMETER | parameter |
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á.
RetentionPolicy | Dostupnosť |
---|---|
RetentionPolicy.SOURCE | odkazuje na zdrojový kód, ktorý sa počas kompilácie zahodí. Nebude k dispozícii v kompilovanej triede. |
RetentionPolicy.CLASS | odkazuje na súbor .class, dostupný pre kompilátor java, ale nie pre JVM . Je súčasťou súboru triedy. |
RetentionPolicy.RUNTIME | odkazuje 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('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()); }}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.