logo

Java anotācijas

Java Anotācija ir atzīme, kas apzīmē metadati t.i., pievienots ar klasi, saskarni, metodēm vai laukiem, lai norādītu papildu informāciju, ko var izmantot Java kompilators un JVM.

Java anotācijas tiek izmantotas, lai sniegtu papildu informāciju, tāpēc tā ir alternatīva opcija XML un Java marķieru saskarnēm.

Pirmkārt, mēs apgūsim dažas iebūvētās anotācijas, pēc tam mēs turpināsim izveidot un izmantot pielāgotas anotācijas.


Iebūvētas Java anotācijas

Java ir vairākas iebūvētas anotācijas. Dažas anotācijas tiek lietotas Java kodam un dažas citām anotācijām.

Java kodā izmantotās iebūvētās Java anotācijas

  • @Override
  • @SuppressWarnings
  • @Novecojis

Citās anotācijās izmantotās iebūvētās Java anotācijas

  • @Mērķis
  • @Saglabāšana
  • @Mantojums
  • @dokumentēts

Iebūvēto anotāciju izpratne

Vispirms sapratīsim iebūvētās anotācijas.

@Override

@Override anotācija nodrošina, ka apakšklases metode ignorē vecākklases metodi. Ja tas tā nav, rodas kompilēšanas laika kļūda.

Dažreiz mēs pieļaujam muļķīgas kļūdas, piemēram, pareizrakstības kļūdas utt. Tāpēc labāk ir atzīmēt @Override anotāciju, kas nodrošina pārliecību, ka metode tiek ignorēta.

govinda
 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(); }} 
Izmēģiniet to tūlīt
 Output:Comple Time Error 

@SuppressWarnings

@SuppressWarnings anotācija: tiek izmantota, lai izslēgtu kompilatora izdotos brīdinājumus.

 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); }} 
Izmēģiniet to tūlīt
 Now no warning at compile time. 

Ja noņemsit @SuppressWarnings('unchecked') anotāciju, kompilēšanas laikā tiks parādīts brīdinājums, jo mēs izmantojam nevispārēju kolekciju.


@Novecojis

@Novecojusi anotācija norāda, ka šī metode ir novecojusi, tāpēc kompilators drukā brīdinājumu. Tas informē lietotāju, ka tas var tikt noņemts nākamajās versijās. Tāpēc šādas metodes labāk neizmantot.

Sandžejs Duts un
 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(); }} 
Izmēģiniet to tūlīt

Kompilācijas laikā:

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

Izpildes laikā:

 hello n 

Java pielāgotas anotācijas

Java pielāgotas anotācijas vai Java Lietotāja definētas anotācijas ir viegli izveidojamas un lietojamas. The @interfeiss elements tiek izmantots anotācijas deklarēšanai. Piemēram:

 @interface MyAnnotation{} 

Šeit MyAnnotation ir pielāgotais anotācijas nosaukums.

Punkti, kas jāatceras par java pielāgotās anotācijas parakstu

Ir daži punkti, kas programmētājam būtu jāatceras.

  1. Metode nedrīkst saturēt nevienu metienu klauzulu
  2. Metodei ir jāatgriež viens no šiem datu tipiem: primitīvie datu tipi, virkne, klase, enum vai šo datu tipu masīvs.
  3. Metodei nevajadzētu būt nevienam parametram.
  4. Mums jāpievieno @ tieši pirms interfeisa atslēgvārda, lai definētu anotāciju.
  5. Tas var piešķirt metodei noklusējuma vērtību.

Anotāciju veidi

Ir trīs veidu anotācijas.

  1. Marķiera anotācija
  2. Vienas vērtības anotācija
  3. Vairāku vērtību anotācija
Java anotāciju veidi

1) Marķiera anotācija

Anotāciju, kurai nav metodes, sauc par marķiera anotāciju. Piemēram:

 @interface MyAnnotation{} 

@Override un @Deprecated ir marķieru anotācijas.

java char uz int

2) vienas vērtības anotācija

Anotāciju, kurai ir viena metode, sauc par vienas vērtības anotāciju. Piemēram:

 @interface MyAnnotation{ int value(); } 

Mēs varam nodrošināt arī noklusējuma vērtību. Piemēram:

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

Kā lietot vienas vērtības anotāciju

Apskatīsim kodu, lai lietotu vienas vērtības anotāciju.

 @MyAnnotation(value=10) 

Vērtība var būt jebkas.


3) Vairāku vērtību anotācija

Anotāciju, kurai ir vairāk nekā viena metode, sauc par vairāku vērtību anotāciju. Piemēram:

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

Mēs varam nodrošināt arī noklusējuma vērtību. Piemēram:

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

Kā lietot vairāku vērtību anotāciju

Apskatīsim kodu, lai lietotu vairāku vērtību anotāciju.

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

Iebūvētās anotācijas, ko izmanto java pielāgotajās anotācijās

  • @Mērķis
  • @Saglabāšana
  • @Mantojums
  • @dokumentēts

@Mērķis

@Mērķis tagu izmanto, lai norādītu, pie kāda veida anotācija tiek izmantota.

entītiju relāciju

java.lang.anotācija. ElementType enum deklarē daudzas konstantes, lai norādītu elementa veidu, kuram jāpielieto anotācija, piemēram, TIPS, METODE, LAUKS utt. Apskatīsim ElementType enum konstantes:

Elementu veidiKur var lietot anotāciju
VEIDSklase, saskarne vai uzskaitījums
LAUKSlauki
METODEmetodes
KONSTRUKTORSkonstruktori
LOCAL_VARIABLEvietējie mainīgie
ANNOTATION_TYPEanotācijas veids
PARAMETRSparametrs

Piemērs, lai norādītu klases anotāciju

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

Piemērs, lai norādītu anotāciju klasei, metodēm vai laukiem

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

@Saglabāšana

@Saglabāšana anotācija tiek izmantota, lai norādītu, kādā līmenī anotācija būs pieejama.

Saglabāšanas politikaPieejamība
Saglabāšanas politika.SOURCEattiecas uz avota kodu, kas tiek izmests kompilācijas laikā. Tas nebūs pieejams sastādītajā klasē.
RetentionPolicy.CLASSattiecas uz .class failu, kas pieejams java kompilatoram, bet ne JVM . Tas ir iekļauts klases failā.
RetentionPolicy.RUNTIMEattiecas uz izpildlaiku, kas pieejams Java kompilatoram un JVM .

Piemērs, lai norādītu saglabāšanas politiku

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

Pielāgotas anotācijas piemērs: anotācijas izveide, lietošana un piekļuve

Apskatīsim vienkāršu piemēru anotācijas izveidei, lietošanai un piekļuvei.

Fails: 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()); }} 
Izmēģiniet to tūlīt
 Output:value is: 10 

lejupielādējiet šo piemēru

Kā iebūvētās anotācijas tiek izmantotas reālā scenārijā?

Reālā gadījumā java programmētājam ir jāpiemēro tikai anotācija. Viņam/viņai nav jāizveido anotācija un tai nav jāpiekļūst. Anotācijas izveidi un piekļuvi veic ieviešanas nodrošinātājs. Anotācijas vārdā java kompilators vai JVM veic dažas papildu darbības.


@Mantojums

Pēc noklusējuma anotācijas netiek mantotas apakšklasēm. Anotācija @Inherited atzīmē apakšklasēm mantojamo anotāciju.

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

@dokumentēts

@Documented atzīmē anotāciju iekļaušanai dokumentācijā.