logo

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.

css středové tlačítko
 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.

chyba: nelze najít nebo načíst hlavní třídu
 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.

java převod celého čísla na řetězec
 @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:

jak najít skryté aplikace na android
Typy prvkůKde lze anotaci použít
TYPtřída, rozhraní nebo výčet
POLEpole
METODAmetody
KONSTRUKTORkonstruktéři
LOCAL_VARIABLElokální proměnné
ANNOTATION_TYPEtyp anotace
PARAMETRparametr

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á.

RetentionPolicyDostupnost
RetentionPolicy.SOURCEodkazuje na zdrojový kód, vyřazený během kompilace. V kompilované třídě nebude k dispozici.
RetentionPolicy.CLASSodkazuje na soubor .class, dostupný pro kompilátor java, ale ne pro JVM . Je součástí souboru třídy.
RetentionPolicy.RUNTIMEodkazuje 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.