Java Annotaatio on tagi, joka edustaa metatiedot eli liitetty luokkaan, käyttöliittymään, menetelmiin tai kenttään osoittamaan lisätietoa, jota Java-kääntäjä ja JVM voivat käyttää.
Java-merkintöjä käytetään lisätietojen antamiseen, joten se on vaihtoehtoinen vaihtoehto XML- ja Java-merkkirajapinnoille.
Ensin opimme joitakin sisäänrakennettuja merkintöjä, sitten siirrymme mukautettujen merkintöjen luomiseen ja käyttämiseen.
Sisäänrakennetut Java-merkinnät
Javassa on useita sisäänrakennettuja huomautuksia. Joitakin merkintöjä käytetään Java-koodiin ja toisia muihin merkintöihin.
Sisäänrakennetut Java-merkinnät, joita käytetään Java-koodissa
- @Ohittaa
- @SuppressWarnings
- @Käytöstä poistettu
Sisäänrakennetut Java-merkinnät, joita käytetään muissa merkinnöissä
- @Kohde
- @Säilyttäminen
- @peritty
- @Dokumentoitu
Sisäänrakennettujen huomautusten ymmärtäminen
Ymmärretään ensin sisäänrakennetut merkinnät.
@Ohittaa
@Override-merkintä varmistaa, että alaluokkamenetelmä ohittaa emoluokan menetelmän. Jos näin ei ole, tapahtuu käännösaikavirhe.
Joskus teemme typeriä virheitä, kuten kirjoitusvirheitä jne. Joten on parempi merkitä @Override-merkintä, joka antaa varmuuden siitä, että menetelmä ohitetaan.
keskimmäinen css-painike
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(); }}Testaa nyt
Output:Comple Time Error
@SuppressWarnings
@SuppressWarnings-merkintä: käytetään estämään kääntäjän antamat varoitukset.
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); }}Testaa nyt
Now no warning at compile time.
Jos poistat @SuppressWarnings('unchecked') -merkinnän, se näyttää varoituksen käännöshetkellä, koska käytämme ei-yleistä kokoelmaa.
@Käytöstä poistettu
@Vähentynyt merkintä merkitsee, että tämä menetelmä on vanhentunut, joten kääntäjä tulostaa varoituksen. Se ilmoittaa käyttäjälle, että se voidaan poistaa tulevissa versioissa. Joten on parempi olla käyttämättä tällaisia menetelmiä.
linkitetty lista 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(); }}Testaa nyt
Kokoonpanoaikana:
Note: Test.java uses or overrides a deprecated API. <br> Note: Recompile with -Xlint:deprecation for details.
Ajon aikana:
hello n
Java mukautetut huomautukset
Java mukautetut huomautukset tai Java Käyttäjän määrittämiä huomautuksia on helppo luoda ja käyttää. The @käyttöliittymä elementtiä käytetään huomautuksen ilmoittamiseen. Esimerkiksi:
@interface MyAnnotation{}
Tässä MyAnnotation on mukautetun merkinnän nimi.
Muistettava java-merkintäallekirjoitus
On muutamia kohtia, jotka ohjelmoijan tulisi muistaa.
- Menetelmässä ei saa olla heittolausekkeita
- Menetelmän tulee palauttaa jokin seuraavista: primitiiviset tietotyypit, merkkijono, luokka, enum tai näiden tietotyyppien joukko.
- Menetelmällä ei saa olla mitään parametria.
- Meidän tulee liittää @ juuri ennen käyttöliittymän avainsanaa merkinnän määrittelemiseksi.
- Se voi määrittää menetelmälle oletusarvon.
Annotaatiotyypit
Merkintöjä on kolmenlaisia.
- Merkin huomautus
- Yksiarvoinen huomautus
- Moniarvoinen huomautus
1) Merkintämerkintä
Annotaatiota, jolla ei ole menetelmää, kutsutaan merkkimerkintäksi. Esimerkiksi:
@interface MyAnnotation{}
@Override ja @Deprecated ovat merkkimerkintöjä.
merkkijono alimerkkijono java
2) Yksiarvoinen huomautus
Annotaatiota, jolla on yksi menetelmä, kutsutaan yksiarvoiseksi annotaatioksi. Esimerkiksi:
@interface MyAnnotation{ int value(); }
Voimme tarjota myös oletusarvon. Esimerkiksi:
@interface MyAnnotation{ int value() default 0; }
Yhden arvon merkinnän käyttäminen
Katsotaanpa koodi yhden arvon merkinnän käyttämiseksi.
@MyAnnotation(value=10)
Arvo voi olla mikä tahansa.
3) Moniarvoinen huomautus
Huomautusta, jolla on useampi kuin yksi menetelmä, kutsutaan moniarvoiseksi huomautukseksi. Esimerkiksi:
@interface MyAnnotation{ int value1(); String value2(); String value3(); } }
Voimme tarjota myös oletusarvon. Esimerkiksi:
@interface MyAnnotation{ int value1() default 1; String value2() default ''; String value3() default 'xyz'; }
Kuinka käyttää moniarvoista huomautusta
Katsotaanpa koodia moniarvoisen huomautuksen käyttämiseksi.
@MyAnnotation(value1=10,value2='Arun Kumar',value3='Ghaziabad')
Sisäänrakennetut merkinnät, joita käytetään mukautetuissa merkinnöissä javassa
- @Kohde
- @Säilyttäminen
- @peritty
- @Dokumentoitu
@Kohde
@Kohde -tunnistetta käytetään määrittämään, missä tyypissä huomautusta käytetään.
lista java
java.lang.-merkintä. ElementType enum ilmoittaa useita vakioita määrittääkseen elementin tyypin, johon huomautuksia käytetään, kuten TYPE, METHOD, FIELD jne. Katsotaanpa ElementType enumin vakiot:
Elementtityypit | Missä huomautusta voidaan käyttää |
---|---|
TYYPPI | luokka, käyttöliittymä tai luettelo |
ALA | kentät |
MENETELMÄ | menetelmiä |
RAKENTAJA | rakentajat |
LOCAL_VARIABLE | paikalliset muuttujat |
ANNOTATION_TYPE | huomautuksen tyyppi |
PARAMETRI | parametri |
Esimerkki luokan merkinnän määrittämisestä
@Target(ElementType.TYPE) @interface MyAnnotation{ int value1(); String value2(); }
Esimerkki luokan, menetelmien tai kenttien huomautuksen määrittämisestä
@Target({ElementType.TYPE, ElementType.FIELD, ElementType.METHOD}) @interface MyAnnotation{ int value1(); String value2(); }
@Säilyttäminen
@Säilyttäminen annotaatiota käytetään määrittämään, mille tasolle merkintä on saatavilla.
Säilytyskäytäntö | Saatavuus |
---|---|
RetentionPolicy.SOURCE | viittaa lähdekoodiin, joka hylätään kääntämisen aikana. Se ei ole saatavilla käännetyllä luokalla. |
RetentionPolicy.CLASS | viittaa .class-tiedostoon, joka on saatavilla java-kääntäjälle, mutta ei JVM:lle. Se sisältyy luokkatiedostoon. |
RetentionPolicy.RUNTIME | viittaa java-kääntäjän ja JVM:n käytettävissä olevaan suoritusaikaan. |
Esimerkki RetentionPolicyn määrittämisestä
@Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) @interface MyAnnotation{ int value1(); String value2(); }
Esimerkki mukautetusta merkinnästä: merkinnän luominen, käyttäminen ja käyttö
Katsotaanpa yksinkertainen esimerkki merkintöjen luomisesta, käyttämisestä ja käyttämisestä.
Tiedosto: 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()); }}Testaa nyt
Output:value is: 10
lataa tämä esimerkki
Kuinka sisäänrakennettuja merkintöjä käytetään todellisessa skenaariossa?
Todellisessa skenaariossa java-ohjelmoijan tarvitsee vain käyttää huomautuksia. Hänen ei tarvitse luoda huomautusta ja käyttää sitä. Toteutuksen tarjoaja suorittaa huomautuksen luomisen ja käyttämisen. Annotation puolesta java-kääntäjä tai JVM suorittaa joitain lisätoimintoja.
@peritty
Oletusarvoisesti huomautuksia ei peritty alaluokille. @Peritty-merkintä merkitsee alaluokkiin perittävän huomautuksen.
@Inherited @interface ForEveryone { }//Now it will be available to subclass also @interface ForEveryone { } class Superclass{} class Subclass extends Superclass{}
@Dokumentoitu
@Documented Merkitsee huomautuksen dokumentaatioon sisällytettäväksi.