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 @Override
merkinnöistä.
@Override
Merkintä 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ää @Override
menetelmä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
@Deprecated
@Override
@SuppressWarnings
@SafeVarargs
@FunctionalInterface
2. Meta-annotations
@Retention
@Documented
@Target
@Inherited
@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.