Java Anotacija je oznaka koja predstavlja metapodaci tj. priloženo s klasom, sučeljem, metodama ili poljima za označavanje nekih dodatnih informacija koje mogu koristiti java kompajler i JVM.
Bilješke u Javi koriste se za pružanje dodatnih informacija, tako da je to alternativna opcija za XML i Java marker sučelja.
Prvo ćemo naučiti neke ugrađene bilješke, a zatim ćemo krenuti sa stvaranjem i korištenjem prilagođenih bilješki.
Ugrađene Java bilješke
Postoji nekoliko ugrađenih komentara u Javi. Neke se primjedbe primjenjuju na Java kod, a neke na druge primjedbe.
Ugrađene Java napomene koje se koriste u Java kodu
- @Nadjačaj
- @SuppressWarnings
- @Zastarjelo
Ugrađene Java napomene koje se koriste u drugim napomenama
- @Cilj
- @Zadržavanje
- @Naslijeđeno
- @Dokumentirano
Razumijevanje ugrađenih komentara
Prvo shvatimo ugrađene bilješke.
@Nadjačaj
Napomena @Override osigurava da metoda podklase nadjačava metodu nadređene klase. Ako nije tako, javlja se pogreška vremena kompajliranja.
Ponekad napravimo glupe pogreške kao što su pravopisne pogreške itd. Dakle, bolje je označiti @Override napomenu koja pruža sigurnost da je metoda nadjačana.
string to long
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(); }}Testirajte sada
Output:Comple Time Error
@SuppressWarnings
Napomena @SuppressWarnings: koristi se za suzbijanje upozorenja koje izdaje prevodilac.
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); }}Testirajte sada
Now no warning at compile time.
Ako uklonite napomenu @SuppressWarnings('unchecked'), prikazat će se upozorenje tijekom kompajliranja jer koristimo negeneričku zbirku.
@Zastarjelo
@Deprecated annoation označava da je ova metoda zastarjela pa prevodilac ispisuje upozorenje. Obavještava korisnika da bi mogao biti uklonjen u budućim verzijama. Stoga je bolje ne koristiti takve metode.
povezani popis java
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(); }}Testirajte sada
U vrijeme kompajliranja:
Note: Test.java uses or overrides a deprecated API. <br> Note: Recompile with -Xlint:deprecation for details.
Tijekom izvođenja:
hello n
Java prilagođene bilješke
Java prilagođene bilješke ili Java Korisnički definirane zabilješke lako se stvaraju i koriste. The @sučelje element se koristi za deklariranje napomene. Na primjer:
@interface MyAnnotation{}
Ovdje je MyAnnotation naziv prilagođene napomene.
Bodovi koje treba zapamtiti za java prilagođeni potpis napomena
Malo je točaka koje bi programer trebao zapamtiti.
- Metoda ne bi trebala imati klauzule bacanja
- Metoda bi trebala vratiti jedno od sljedećeg: primitivne tipove podataka, String, Class, enum ili niz ovih tipova podataka.
- Metoda ne bi trebala imati nijedan parametar.
- Trebali bismo dodati @ neposredno prije ključne riječi sučelja kako bismo definirali komentar.
- Može dodijeliti zadanu vrijednost metodi.
Vrste anotacija
Postoje tri vrste zabilješki.
- Bilješka markera
- Napomena s jednom vrijednošću
- Napomena s više vrijednosti
1) Bilješka markera
Bilješka koja nema metodu naziva se oznaka markera. Na primjer:
@interface MyAnnotation{}
@Override i @Deprecated su bilješke markera.
2) Napomena s jednom vrijednošću
Bilješka koja ima jednu metodu naziva se anotacija s jednom vrijednošću. Na primjer:
@interface MyAnnotation{ int value(); }
Također možemo dati zadanu vrijednost. Na primjer:
@interface MyAnnotation{ int value() default 0; }
Kako primijeniti napomenu s jednom vrijednošću
Pogledajmo kod za primjenu anotacije jedne vrijednosti.
jvm
@MyAnnotation(value=10)
Vrijednost može biti bilo što.
3) Napomena s više vrijednosti
Napomena koja ima više od jedne metode naziva se viševrijednom napomenom. Na primjer:
@interface MyAnnotation{ int value1(); String value2(); String value3(); } }
Također možemo dati zadanu vrijednost. Na primjer:
@interface MyAnnotation{ int value1() default 1; String value2() default ''; String value3() default 'xyz'; }
Kako primijeniti viševrijednu napomenu
Pogledajmo kôd za primjenu viševrijednosti.
@MyAnnotation(value1=10,value2='Arun Kumar',value3='Ghaziabad')
Ugrađene napomene koje se koriste u prilagođenim napomenama u Javi
- @Cilj
- @Zadržavanje
- @Naslijeđeno
- @Dokumentirano
@Cilj
@Cilj Oznaka se koristi za određivanje za koji tip se koristi komentar.
java.lang.annotation. ElementType enum deklarira mnoge konstante da specificira tip elementa na koji će se primijeniti komentar, kao što su TYPE, METHOD, FIELD itd. Pogledajmo konstante ElementType enuma:
k algoritam najbližeg susjeda
Vrste elemenata | Gdje se anotacija može primijeniti |
---|---|
TIP | klasa, sučelje ili enumeracija |
POLJE | polja |
METODA | metode |
KONSTRUKTOR | konstruktori |
LOCAL_VARIABLE | lokalne varijable |
ANNOTATION_TYPE | vrsta zabilješke |
PARAMETAR | parametar |
Primjer određivanja oznake za klasu
@Target(ElementType.TYPE) @interface MyAnnotation{ int value1(); String value2(); }
Primjer navođenja zabilješki za klasu, metode ili polja
@Target({ElementType.TYPE, ElementType.FIELD, ElementType.METHOD}) @interface MyAnnotation{ int value1(); String value2(); }
@Zadržavanje
@Zadržavanje anotacija se koristi za određivanje do koje će razine biti dostupna bilješka.
Politika zadržavanja | Dostupnost |
---|---|
RetentionPolicy.SOURCE | odnosi se na izvorni kod, odbačen tijekom kompilacije. Neće biti dostupan u kompiliranoj klasi. |
RetentionPolicy.KLAS | odnosi se na .class datoteku, dostupnu java prevoditelju, ali ne i JVM-u. Uključen je u datoteku razreda. |
RetentionPolicy.RUNTIME | odnosi se na vrijeme izvođenja, dostupno java prevoditelju i JVM-u. |
Primjer za određivanje RetentionPolicy
@Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) @interface MyAnnotation{ int value1(); String value2(); }
Primjer prilagođene zabilješke: stvaranje, primjena i pristup zabilješci
Pogledajmo jednostavan primjer stvaranja, primjene i pristupanja bilješkama.
Datoteka: 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()); }}Testirajte sada
Output:value is: 10
preuzmite ovaj primjer
Kako se ugrađene napomene koriste u stvarnom scenariju?
U stvarnom scenariju, java programer treba samo primijeniti napomenu. On/ona ne treba stvarati i pristupati bilješci. Stvaranje i pristup anotaciji obavlja pružatelj implementacije. U ime anotacije, java prevodilac ili JVM izvodi neke dodatne operacije.
@Naslijeđeno
Prema zadanim postavkama, komentari se ne nasljeđuju na podklase. Bilješka @Inherited označava napomenu koja će se naslijediti podklasama.
@Inherited @interface ForEveryone { }//Now it will be available to subclass also @interface ForEveryone { } class Superclass{} class Subclass extends Superclass{}
@Dokumentirano
@Documented Označava napomenu za uključivanje u dokumentaciju.