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.
- Metoda by neměla mít žádné klauzule throws
- Metoda by měla vracet jednu z následujících: primitivní datové typy, String, Class, enum nebo pole těchto datových typů.
- Metoda by neměla mít žádný parametr.
- Měli bychom připojit @ těsně před klíčovým slovem rozhraní, abychom definovali anotaci.
- Může metodě přiřadit výchozí hodnotu.
Typy anotací
Existují tři typy anotací.
- Anotace značky
- Jednohodnotová anotace
- Vícehodnotová anotace
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 ''; String value3() default 'xyz'; }
Jak použít vícehodnotovou anotaci
Podívejme se na kód pro použití vícehodnotové anotace.
@MyAnnotation(value1=10,value2='Arun Kumar',value3='Ghaziabad')
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 |
---|---|
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('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()); }}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.