logo

Adnotări Java

Java Adnotare este o etichetă care reprezintă metadate adică atașat cu clasă, interfață, metode sau câmpuri pentru a indica unele informații suplimentare care pot fi utilizate de compilatorul java și JVM.

Adnotările în Java sunt folosite pentru a furniza informații suplimentare, deci este o opțiune alternativă pentru interfețele de marcare XML și Java.

Mai întâi, vom învăța câteva adnotări încorporate, apoi vom continua să creăm și să folosim adnotări personalizate.


Adnotări Java încorporate

Există mai multe adnotări încorporate în Java. Unele adnotări sunt aplicate codului Java, iar altele altor adnotări.

Adnotări Java încorporate utilizate în codul Java

  • @Trece peste
  • @SuppressWarnings
  • @Depreciat

Adnotări Java încorporate utilizate în alte adnotări

  • @Ţintă
  • @Retenţie
  • @Mostenit
  • @Documentat

Înțelegerea adnotărilor încorporate

Să înțelegem mai întâi adnotările încorporate.

@Trece peste

Adnotarea @Override asigură că metoda subclasei suprascrie metoda clasei părinte. Dacă nu este așa, apare o eroare de timp de compilare.

Uneori, facem o greșeală prostească, cum ar fi greșelile de ortografie etc. Așadar, este mai bine să marcați adnotarea @Override care oferă asigurarea că metoda este suprascrisă.

alya manasa
 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(); }} 
Testează-l acum
 Output:Comple Time Error 

@SuppressWarnings

Adnotarea @SuppressWarnings: este folosită pentru a suprima avertismentele emise de compilator.

 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); }} 
Testează-l acum
 Now no warning at compile time. 

Dacă eliminați adnotarea @SuppressWarnings('unchecked'), va afișa un avertisment în timpul compilării, deoarece folosim o colecție non-generic.


@Depreciat

Adnotarea @Deprecated indică faptul că această metodă este depreciată, astfel încât compilatorul imprimă avertisment. Acesta informează utilizatorul că poate fi eliminat în versiunile viitoare. Deci, este mai bine să nu folosiți astfel de metode.

șiruri de caractere 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(); }} 
Testează-l acum

La momentul compilării:

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

La Runtime:

 hello n 

Adnotări personalizate Java

Adnotări personalizate Java sau Java Adnotările definite de utilizator sunt ușor de creat și utilizat. The @interfață elementul este folosit pentru a declara o adnotare. De exemplu:

 @interface MyAnnotation{} 

Aici, MyAnnotation este numele adnotării personalizate.

Puncte de reținut pentru semnătura de adnotare personalizată java

Există câteva puncte care ar trebui să fie amintite de programator.

  1. Metoda nu trebuie să aibă clauze de aruncare
  2. Metoda ar trebui să returneze una dintre următoarele: tipuri de date primitive, șir, clasă, enumerare sau matrice ale acestor tipuri de date.
  3. Metoda nu trebuie să aibă niciun parametru.
  4. Ar trebui să atașăm @ chiar înainte de cuvântul cheie al interfeței pentru a defini adnotarea.
  5. Poate atribui o valoare implicită metodei.

Tipuri de adnotare

Există trei tipuri de adnotări.

  1. Adnotare marcator
  2. Adnotare cu o singură valoare
  3. Adnotare cu mai multe valori
Tipuri de adnotări Java

1) Adnotare marker

O adnotare care nu are nicio metodă, se numește adnotare marker. De exemplu:

 @interface MyAnnotation{} 

@Override și @Deprecated sunt adnotări marcatoare.


2) Adnotare cu o singură valoare

O adnotare care are o singură metodă se numește adnotare cu o singură valoare. De exemplu:

sensul xdxd
 @interface MyAnnotation{ int value(); } 

Putem oferi și valoarea implicită. De exemplu:

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

Cum se aplică adnotarea cu o singură valoare

Să vedem codul pentru a aplica adnotarea cu o singură valoare.

 @MyAnnotation(value=10) 

Valoarea poate fi orice.


3) Adnotare cu mai multe valori

O adnotare care are mai multe metode, se numește adnotare cu mai multe valori. De exemplu:

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

Putem oferi și valoarea implicită. De exemplu:

șir separat în java
 @interface MyAnnotation{ int value1() default 1; String value2() default &apos;&apos;; String value3() default &apos;xyz&apos;; } 

Cum se aplică Adnotarea cu valori multiple

Să vedem codul pentru a aplica adnotarea cu mai multe valori.

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

Adnotări încorporate utilizate în adnotările personalizate în java

  • @Ţintă
  • @Retenţie
  • @Mostenit
  • @Documentat

@Ţintă

@Ţintă eticheta este utilizată pentru a specifica la ce tip este utilizată adnotarea.

Adnotarea java.lang. ElementType enum declară multe constante pentru a specifica tipul de element în care urmează să fie aplicată adnotarea, cum ar fi TYPE, METHOD, FIELD etc. Să vedem constantele ElementType enum:

Tipuri de elementeUnde se poate aplica adnotarea
TIPclasă, interfață sau enumerare
CAMPcâmpuri
METODĂmetode
CONSTRUCTORconstructorii
LOCAL_VARIABLEvariabile locale
ANNOTATION_TYPEtip de adnotare
PARAMETRUparametru

Exemplu pentru a specifica o adnotare pentru o clasă

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

Exemplu pentru specificarea adnotărilor pentru o clasă, metode sau câmpuri

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

@Retenţie

@Retenţie adnotarea este utilizată pentru a specifica la ce nivel va fi disponibilă adnotarea.

Politica de păstrareDisponibilitate
RetentionPolicy.SOURCEse referă la codul sursă, aruncat în timpul compilării. Nu va fi disponibil în clasa compilată.
RetentionPolicy.CLASSse referă la fișierul .class, disponibil pentru compilatorul java, dar nu și pentru JVM. Este inclus în dosarul clasei.
RetentionPolicy.RUNTIMEse referă la timpul de execuție, disponibil pentru compilatorul java și JVM.

Exemplu pentru a specifica RetentionPolicy

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

Exemplu de adnotare personalizată: crearea, aplicarea și accesarea adnotărilor

Să vedem exemplul simplu de creare, aplicare și accesare a adnotărilor.

Fișier: 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()); }} 
Testează-l acum
 Output:value is: 10 

descărcați acest exemplu

Cum sunt utilizate adnotările încorporate în scenariul real?

În scenariul real, programatorul java trebuie doar să aplice adnotări. El/ea nu trebuie să creeze și să acceseze adnotări. Crearea și accesarea adnotărilor este efectuată de furnizorul de implementare. În numele adnotării, compilatorul java sau JVM efectuează unele operații suplimentare.


@Mostenit

În mod implicit, adnotările nu sunt moștenite la subclase. Adnotarea @Inherited marchează adnotarea care urmează să fie moștenită în subclase.

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

@Documentat

@Documented marchează adnotarea pentru a fi inclusă în documentație.