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.
- Metode nedrīkst saturēt nevienu metienu klauzulu
- Metodei ir jāatgriež viens no šiem datu tipiem: primitīvie datu tipi, virkne, klase, enum vai šo datu tipu masīvs.
- Metodei nevajadzētu būt nevienam parametram.
- Mums jāpievieno @ tieši pirms interfeisa atslēgvārda, lai definētu anotāciju.
- Tas var piešķirt metodei noklusējuma vērtību.
Anotāciju veidi
Ir trīs veidu anotācijas.
- Marķiera anotācija
- Vienas vērtības anotācija
- Vairāku vērtību anotācija
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 ''; String value3() default 'xyz'; }
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='Arun Kumar',value3='Ghaziabad')
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 veidi | Kur var lietot anotāciju |
---|---|
VEIDS | klase, saskarne vai uzskaitījums |
LAUKS | lauki |
METODE | metodes |
KONSTRUKTORS | konstruktori |
LOCAL_VARIABLE | vietējie mainīgie |
ANNOTATION_TYPE | anotācijas veids |
PARAMETRS | parametrs |
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 politika | Pieejamība |
---|---|
Saglabāšanas politika.SOURCE | attiecas uz avota kodu, kas tiek izmests kompilācijas laikā. Tas nebūs pieejams sastādītajā klasē. |
RetentionPolicy.CLASS | attiecas uz .class failu, kas pieejams java kompilatoram, bet ne JVM . Tas ir iekļauts klases failā. |
RetentionPolicy.RUNTIME | attiecas 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('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()); }}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ā.