Java-merkinnät (esimerkkien kanssa)

Tässä opetusohjelmassa opitaan, mitä merkinnät, erilaiset Java-merkinnät ja miten niitä käytetään esimerkkien avulla.

Java-merkinnät ovat ohjelman lähdekoodin metatietoja (tietoja tiedoista).

Ne antavat kääntäjälle lisätietoja ohjelmasta, mutta eivät ole osa itse ohjelmaa. Nämä merkinnät eivät vaikuta käännetyn ohjelman suoritukseen.

Merkinnät alkavat @. Sen syntaksi on:

 @AnnotationName 

Otetaan esimerkki @Overridemerkinnöistä.

@OverrideMerkintä täsmennetään, että menetelmä, joka on merkitty tällä merkintä ohittaa menetelmän yläluokkaan samalla menetelmällä nimi, palautuva, ja parametriluettelo.

Ei ole pakollista käyttää @Overridemenetelmän ohittamisessa. Kuitenkin, jos käytämme sitä, kääntäjä antaa virheen, jos jokin on vialla (kuten väärä parametrityyppi), kun ohitat menetelmän.

Esimerkki 1: @Override Annotation Example

 class Animal ( public void displayInfo() ( System.out.println("I am an animal."); ) ) class Dog extends Animal ( @Override public void displayInfo() ( System.out.println("I am a dog."); ) ) class Main ( public static void main(String() args) ( Dog d1 = new Dog(); d1.displayInfo(); ) ) 

Tuotos

 Olen koira. 

Tässä esimerkissä menetelmä displayInfo()on läsnä sekä yläluokan eläin- että aliluokka-koirassa. Kun tätä menetelmää kutsutaan, kutsutaan alaluokan menetelmä yliluokan menetelmän sijasta.

Merkintämuodot

Merkinnät voivat sisältää myös elementtejä (jäsenet / attribuutit / parametrit).

1. Merkintämerkinnät

Merkintämerkinnät eivät sisällä jäseniä / elementtejä. Sitä käytetään vain ilmoituksen merkitsemiseen.

Sen syntaksi on:

 @AnnotationName () 

Koska nämä merkinnät eivät sisällä elementtejä, sulut voidaan sulkea pois. Esimerkiksi,

 @Ohittaa 

2. Yhden elementin merkinnät

Yhden elementin merkinnässä on vain yksi elementti.

Sen syntaksi on:

 @AnnotationName (elementNAME = "elementValue") 

Jos elementtejä on vain yksi, on tapana nimetä kyseinen elementti arvoksi.

 @AnnotationName (arvo = "elementValue") 

Tässä tapauksessa myös elementin nimi voidaan sulkea pois. Elementin nimi on oletusarvoisesti arvo.

 @AnnotationName ("elementValue") 

3. Useiden elementtien merkinnät

Nämä merkinnät sisältävät useita pilkuilla erotettuja elementtejä.

Sen syntaksi on:

 @AnnotationName (elementti1 = "arvo1", elementti2 = "arvo2") 

Merkintöjen sijoittelu

Mikä tahansa ilmoitus voidaan merkitä merkinnällä sijoittamalla se ilmoituksen yläpuolelle. Java 8: sta alkaen merkinnät voidaan sijoittaa myös tyypin eteen.

1. Edellä olevat ilmoitukset

Kuten edellä mainittiin, Java-merkinnät voidaan sijoittaa luokan, menetelmän, käyttöliittymän, kentän ja muiden ohjelmaelementti-ilmoitusten yläpuolelle.

Esimerkki 2: @SuppressWarnings-huomautusesimerkki

 import java.util.*; class Main ( @SuppressWarnings("unchecked") static void wordsList() ( ArrayList wordList = new ArrayList(); // This causes an unchecked warning wordList.add("programiz"); System.out.println("Word list => " + wordList); ) public static void main(String args()) ( wordsList(); ) ) 

Tuotos

 Sanaluettelo => (programiz) 

Jos yllä oleva ohjelma @SuppressWarnings("unchecked")käännetään ilman merkintöjä, kääntäjä kääntää ohjelman edelleen, mutta se antaa varoituksia, kuten:

Main.java käyttää tarkastamattomia tai vaarallisia toimintoja. Sanaluettelo => (programiz)

Saamme varoituksen

 Main.java käyttää tarkastamattomia tai vaarallisia toimintoja 

seuraavan lausunnon vuoksi.

 ArrayList wordList = new ArrayList(); 

This is because we haven't defined the generic type of the array list. We can fix this warning by specifying generics inside angle brackets .

 ArrayList wordList = new ArrayList(); 

2. Type annotations

Before Java 8, annotations could be applied to declarations only. Now, type annotations can be used as well. This means that we can place annotations wherever we use a type.

Constructor invocations

 new @Readonly ArrayList() 

Type definitions

 @NonNull String str; 

This declaration specifies non-null variable str of type String to avoid NullPointerException.

 @NonNull List newList; 

This declaration specifies a non-null list of type String.

 List newList; 

This declaration specifies a list of non-null values of type String.

Type casts

 newStr = (@NonNull String) str; 

extends and implements clause

 class Warning extends @Localized Message 

throws clause

 public String readMethod() throws @Localized IOException 

Type annotations enable Java code to be analyzed better and provide even stronger type checks.

Types of Annotations

1. Predefined annotations

  1. @Deprecated
  2. @Override
  3. @SuppressWarnings
  4. @SafeVarargs
  5. @FunctionalInterface

2. Meta-annotations

  1. @Retention
  2. @Documented
  3. @Target
  4. @Inherited
  5. @Repeatable

3. Custom annotations

These annotation types are described in detail in the Java Annotation Types tutorial.

Use of Annotations

  • Compiler instructions - Annotations can be used for giving instructions to the compiler, detect errors or suppress warnings. The built-in annotations @Deprecated, @Override, @SuppressWarnings are used for these purposes.
  • Compile-time instructions - Compile-time instructions provided by these annotations help the software build tools to generate code, XML files and many more.
  • Suorituksen ajo-ohjeet - Jotkin merkinnät voidaan määrittää antamaan ohjeet ohjelmalle ajon aikana. Näihin merkintöihin pääsee Java Reflection -sovelluksella.

Mielenkiintoisia artikkeleita...