Java anotācijas (ar piemēriem)

Šajā apmācībā mēs uzzināsim, kas ir anotācijas, dažādas Java anotācijas un kā tās izmantot, izmantojot piemērus.

Java anotācijas ir mūsu programmas avota koda metadati (dati par datiem).

Tie kompilatoram sniedz papildu informāciju par programmu, bet neietilpst pašā programmā. Šīs anotācijas neietekmē sastādītās programmas izpildi.

Anotācijas sākas ar @. Tās sintakse ir:

 @AnnotationName 

Ņemsim @Overrideanotācijas piemēru .

Šīs @Overrideanotācijas, precizēts, ka metode, kas ir atzīmēti ar šo anotāciju ignorēšanas metodi superclass ar tādu pašu metodi nosaukumu, atgriešanās veidam, un parametru sarakstu.

Tas nav obligāti jāizmanto @Override, ignorējot metodi. Tomēr, ja mēs to izmantojam, sastādītājs dod kļūdu, ja kaut kas nepareizs (piemēram, nepareizs parametra tips), ignorējot metodi.

1. piemērs: @ anulēšanas anotācijas piemērs

 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(); ) ) 

Rezultāts

 Es esmu suns. 

Šajā piemērā metode displayInfo()ir sastopama gan augstākās klases dzīvniekā, gan apakšklasē. Izsaucot šo metodi, virsklasē esošās metodes vietā tiek izsaukta apakšklases metode.

Anotāciju formāti

Anotācijās var būt arī elementi (dalībnieki / atribūti / parametri).

1. Marķieru anotācijas

Marķiera anotācijās nav dalībnieku / elementu. To izmanto tikai deklarācijas marķēšanai.

Tās sintakse ir:

 @AnnotationName () 

Tā kā šajās anotācijās nav elementu, iekavas var izslēgt. Piemēram,

 @ Pārvarēt 

2. Viena elementa anotācijas

Viena elementa anotācijā ir tikai viens elements.

Tās sintakse ir:

 @AnnotationName (elementNAME = "elementValue") 

Ja ir tikai viens elements, ir parasts šo elementu nosaukt par vērtību.

 @AnnotationName (vērtība = "elementValue") 

Šajā gadījumā var izslēgt arī elementa nosaukumu. Pēc noklusējuma elementa nosaukums būs vērtība.

 @AnnotationName ("elementValue") 

3. Vairāku elementu anotācijas

Šajās anotācijās ir vairāki ar komatiem atdalīti elementi.

Tās sintakse ir:

 @AnnotationName (elements1 = "vērtība1", elements2 = "vērtība2") 

Anotāciju izvietošana

Jebkuru deklarāciju var atzīmēt ar anotāciju, novietojot to virs šīs deklarācijas. Sākot ar Java 8, anotācijas var ievietot arī pirms tipa.

1. Virs deklarācijām

Kā minēts iepriekš, Java anotācijas var izvietot virs klases, metodes, saskarnes, lauka un citu programmas elementu deklarācijām.

2. piemērs: @SuppressWarnings anotācijas piemērs

 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(); ) ) 

Rezultāts

 Vārdu saraksts => (programiz) 

Ja iepriekšminētā programma ir sastādīta, neizmantojot @SuppressWarnings("unchecked")anotāciju, kompilators joprojām kompilēs programmu, taču tas sniegs šādus brīdinājumus:

Main.java izmanto nepārbaudītas vai nedrošas darbības. Vārdu saraksts => (programiz)

Mēs saņemam brīdinājumu

 Main.java izmanto nepārbaudītas vai nedrošas darbības 

šāda apgalvojuma dēļ.

 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.
  • Runtime instrukcijas - dažas anotācijas var definēt, lai sniegtu norādījumus programmai izpildlaika laikā. Šīm piezīmēm var piekļūt, izmantojot Java Reflection.

Interesanti raksti...