Java anotace

Java anotace

Jáva Anotace je značka, která představuje metadata tj. připojeno s třídou, rozhraním, metodami nebo poli pro označení některých dalších informací, které mohou být použity kompilátorem Java a JVM.

Anotace v Javě se používají k poskytování dalších informací, takže se jedná o alternativní možnost pro rozhraní XML a Java marker.

Nejprve se naučíme některé vestavěné anotace a poté přejdeme k vytváření a používání vlastních anotací.


Vestavěné anotace Java

V Javě je několik vestavěných anotací. Některé anotace jsou aplikovány na kód Java a některé na jiné anotace.

Vestavěné anotace Java používané v kódu Java

  • @Přepsat
  • @SuppressWarnings
  • @Zastaralé

Vestavěné anotace Java používané v jiných anotacích

  • @Cílová
  • @Retence
  • @Zděděno
  • @Dokumentováno

Pochopení vestavěných anotací

Nejprve pochopíme vestavěné anotace.

@Přepsat

Anotace @Override zajišťuje, že metoda podtřídy přepíše metodu nadřazené třídy. Pokud tomu tak není, dojde k chybě kompilace.

Někdy děláme hloupé chyby, jako jsou pravopisné chyby atd. Takže je lepší označit anotaci @Override, která poskytuje jistotu, že metoda bude přepsána.

 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(); }}  
Otestujte to hned
 Output:Comple Time Error  

@SuppressWarnings

Anotace @SuppressWarnings: používá se k potlačení varování vydávaných kompilátorem.

 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); }}  
Otestujte to hned
 Now no warning at compile time.  

Pokud odeberete anotaci @SuppressWarnings('unchecked'), zobrazí se varování v době kompilace, protože používáme negenerickou kolekci.


@Zastaralé

@Zastaralá anotace označuje, že tato metoda je zastaralá, takže kompilátor vypíše varování. Informuje uživatele, že může být v budoucích verzích odstraněn. Proto je lepší takové metody nepoužívat.

 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(); }}  
Otestujte to hned

V době kompilace:

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

Za běhu:

 hello n  

Vlastní anotace Java

Java Vlastní anotace nebo Java Uživatelsky definované anotace se snadno vytvářejí a používají. The @rozhraní prvek se používá k deklaraci anotace. Například:

 @interface MyAnnotation{}  

Zde je MyAnnotation název vlastní anotace.

Body k zapamatování pro podpis vlastní anotace Java

Existuje několik bodů, které by si měl programátor pamatovat.

  1. Metoda by neměla mít žádné klauzule throws
  2. Metoda by měla vracet jednu z následujících: primitivní datové typy, String, Class, enum nebo pole těchto datových typů.
  3. Metoda by neměla mít žádný parametr.
  4. Měli bychom připojit @ těsně před klíčovým slovem rozhraní, abychom definovali anotaci.
  5. Může metodě přiřadit výchozí hodnotu.

Typy anotací

Existují tři typy anotací.

  1. Anotace značky
  2. Jednohodnotová anotace
  3. Vícehodnotová anotace
Typy anotací Java

1) Anotace značky

Anotace, která nemá žádnou metodu, se nazývá anotace značky. Například:

 @interface MyAnnotation{}  

@Override a @Deprecated jsou anotace značek.


2) Jednohodnotová anotace

Anotace, která má jednu metodu, se nazývá anotace s jednou hodnotou. Například:

 @interface MyAnnotation{ int value(); }  

Můžeme také poskytnout výchozí hodnotu. Například:

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

Jak použít anotaci s jednou hodnotou

Podívejme se na kód pro použití anotace s jednou hodnotou.

 @MyAnnotation(value=10)  

Hodnota může být jakákoli.


3) Vícehodnotová anotace

Anotace, která má více než jednu metodu, se nazývá vícehodnotová anotace. Například:

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

Můžeme také poskytnout výchozí hodnotu. Například:

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

Jak použít vícehodnotovou anotaci

Podívejme se na kód pro použití vícehodnotové anotace.

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

Vestavěné anotace používané ve vlastních anotacích v jazyce Java

  • @Cílová
  • @Retence
  • @Zděděno
  • @Dokumentováno

@Cílová

@Cílová tag se používá k určení, u kterého typu se anotace použije.

Java.lang.anotace. ElementType enum deklaruje mnoho konstant k určení typu prvku, na který má být anotace aplikována, jako je TYPE, METHOD, FIELD atd. Podívejme se na konstanty Enum ElementType:

Typy prvků Kde lze anotaci použít
TYP třída, rozhraní nebo výčet
POLE pole
METODA metody
KONSTRUKTOR konstruktéři
LOCAL_VARIABLE lokální proměnné
ANNOTATION_TYPE typ anotace
PARAMETR parametr

Příklad pro zadání anotace pro třídu

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

Příklad pro specifikaci anotace pro třídu, metody nebo pole

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

@Retence

@Retence anotace se používá k určení, na jaké úrovni bude anotace dostupná.

RetentionPolicy Dostupnost
RetentionPolicy.SOURCE odkazuje na zdrojový kód, vyřazený během kompilace. V kompilované třídě nebude k dispozici.
RetentionPolicy.CLASS odkazuje na soubor .class, dostupný pro kompilátor java, ale ne pro JVM . Je součástí souboru třídy.
RetentionPolicy.RUNTIME odkazuje na běhové prostředí dostupné pro kompilátor java a JVM .

Příklad pro specifikaci RetentionPolicy

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

Příklad vlastní anotace: vytvoření, použití a přístup k anotaci

Podívejme se na jednoduchý příklad vytváření, použití a přístupu k anotaci.

Soubor: 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()); }}  
Otestujte to hned
 Output:value is: 10  

stáhněte si tento příklad

Jak se vestavěné anotace používají v reálném scénáři?

V reálném scénáři potřebuje programátor Java pouze použít anotaci. Nepotřebuje vytvářet a přistupovat k anotaci. Vytváření a zpřístupnění anotace provádí poskytovatel implementace. Jménem anotace provádí kompilátor java nebo JVM některé další operace.


@Zděděno

Ve výchozím nastavení se anotace nedědí do podtříd. Anotace @Inherited označuje anotaci, která má být zděděna do podtříd.

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

@Dokumentováno

@Documented Označuje anotaci pro zahrnutí do dokumentace.