Adnotări Java (cu exemple)

În acest tutorial, vom afla ce sunt adnotările, diferite adnotări Java și cum să le folosim cu ajutorul exemplelor.

Adnotările Java sunt metadate (date despre date) pentru codul sursă al programului nostru.

Acestea furnizează informații suplimentare despre program compilatorului, dar nu fac parte din program în sine. Aceste adnotări nu afectează execuția programului compilat.

Adnotările încep cu @. Sintaxa sa este:

 @AnnotationName 

Să luăm un exemplu de @Overrideadnotare.

Cele mai @Overrideprecizează că metoda de adnotare care a fost marcată cu această adnotare a suprascrie metoda din superclasa cu același nume metoda, tipul de întoarcere, și lista de parametri.

Nu este obligatoriu să se utilizeze @Overridela suprascrierea unei metode. Cu toate acestea, dacă îl folosim, compilatorul dă o eroare dacă ceva nu este în regulă (cum ar fi un tip de parametru greșit) în timp ce suprascrie metoda.

Exemplul 1: Exemplu de adnotare @Override

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

Ieșire

 Sunt un caine. 

În acest exemplu, metoda displayInfo()este prezentă atât în ​​superclasa Animal, cât și în subclasa Dog. Când se apelează această metodă, se apelează metoda subclasei în locul metodei din superclasă.

Formate de adnotare

Adnotările pot include și elemente (membri / atribute / parametri).

1. Adnotări de marker

Adnotările de marker nu conțin membri / elemente. Este utilizat numai pentru marcarea unei declarații.

Sintaxa sa este:

 @AnnotationName () 

Deoarece aceste adnotări nu conțin elemente, parantezele pot fi excluse. De exemplu,

 @Trece peste 

2. Adnotări cu element unic

O adnotare cu un singur element conține un singur element.

Sintaxa sa este:

 @AnnotationName (elementName = "elementValue") 

Dacă există un singur element, este o convenție să numim acel element ca valoare.

 @AnnotationName (value = "elementValue") 

În acest caz, poate fi exclus și numele elementului. Numele elementului va avea valoarea implicită.

 @AnnotationName ("elementValue") 

3. Adnotări cu elemente multiple

Aceste adnotări conțin mai multe elemente separate prin virgule.

Sintaxa sa este:

 @AnnotationName (element1 = "valoare1", element2 = "valoare2") 

Plasarea adnotărilor

Orice declarație poate fi marcată cu adnotare plasând-o deasupra declarației respective. Începând cu Java 8, adnotările pot fi plasate și înaintea unui tip.

1. Deasupra declarațiilor

Așa cum am menționat mai sus, adnotările Java pot fi plasate deasupra clasei, metodei, interfeței, câmpului și altor declarații ale elementelor de program.

Exemplul 2: Exemplu de adnotare @SuppressWarnings

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

Ieșire

 Lista de cuvinte => (programiz) 

Dacă programul de mai sus este compilat fără a utiliza @SuppressWarnings("unchecked")adnotarea, compilatorul va compila în continuare programul, dar va da avertismente precum:

Main.java folosește operațiuni necontrolate sau nesigure. Lista de cuvinte => (programiz)

Primim avertismentul

 Main.java folosește operațiuni necontrolate sau nesigure 

din cauza următoarei afirmații.

 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.
  • Instrucțiuni de execuție - Unele adnotări pot fi definite pentru a da instrucțiuni programului în timpul execuției. Aceste adnotări sunt accesate folosind Java Reflection.

Articole interesante...