Java-merkinnät
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.
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ä.
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ä.
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.
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.