Анотации на Java (с примери)

В този урок ще научим какво представляват анотациите, различни Java анотации и как да ги използваме с помощта на примери.

Java анотациите са метаданни (данни за данни) за изходния код на нашата програма.

Те предоставят допълнителна информация за програмата на компилатора, но не са част от самата програма. Тези пояснения не засягат изпълнението на компилираната програма.

Анотациите започват с @. Синтаксисът му е:

 @AnnotationName 

Да вземем пример за @Overrideанотация.

На @Overrideуточнява, анотация, че методът, който е маркиран с тази анотация отменя метода на суперкласа със същото име метод, връщащ тип, и списъка параметър.

Не е задължително да се използва, @Overrideкогато се замени метод. Ако обаче го използваме, компилаторът дава грешка, ако нещо не е наред (например грешен тип параметър), докато замества метода.

Пример 1: @Override Annotation Пример

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

Изход

 Аз съм куче. 

В този пример методът displayInfo()присъства както в суперкласа Animal, така и в подкласа Dog. Когато този метод е извикан, методът на подкласа се извиква вместо метода в суперкласа.

Формати за анотации

Анотациите могат да включват и елементи (членове / атрибути / параметри).

1. Анотации на маркери

Анотациите на маркери не съдържат членове / елементи. Използва се само за маркиране на декларация.

Синтаксисът му е:

 @AnnotationName () 

Тъй като тези пояснения не съдържат елементи, скобите могат да бъдат изключени. Например,

 @Override 

2. Анотации от един елемент

Анотацията на един елемент съдържа само един елемент.

Синтаксисът му е:

 @AnnotationName (elementName = "elementValue") 

Ако има само един елемент, конвенцията е да се назове този елемент като стойност.

 @AnnotationName (стойност = "elementValue") 

В този случай може да се изключи и името на елемента. По подразбиране името на елемента ще бъде стойност.

 @AnnotationName ("elementValue") 

3. Анотации с множество елементи

Тези пояснения съдържат множество елементи, разделени със запетаи.

Синтаксисът му е:

 @AnnotationName (element1 = "value1", element2 = "value2") 

Поставяне на анотации

Всяка декларация може да бъде маркирана с анотация, като я поставите над тази декларация. От Java 8 анотациите могат да се поставят и преди даден тип.

1. Над декларациите

Както бе споменато по-горе, анотациите на Java могат да бъдат поставени над декларации за клас, метод, интерфейс, поле и други програмни елементи.

Пример 2: Пример за анотация на @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(); ) ) 

Изход

 Списък с думи => (programiz) 

Ако горната програма е компилирана без използване на @SuppressWarnings("unchecked")анотацията, компилаторът пак ще компилира програмата, но ще даде предупреждения като:

Main.java използва непроверени или опасни операции. Списък с думи => (programiz)

Получаваме предупреждението

 Main.java използва непроверени или опасни операции 

поради следното твърдение.

 ArrayList wordList = new ArrayList(); 

Това е така, защото не сме дефинирали общия тип на списъка с масиви. Можем да коригираме това предупреждение, като посочим генерични продукти в ъгловите скоби .

 ArrayList wordList = нов ArrayList (); 

2. Въведете анотации

Преди Java 8 анотациите могат да се прилагат само за декларации. Сега могат да се използват и анотации на типа. Това означава, че можем да поставяме пояснения навсякъде, където използваме тип.

Извиквания на конструктора

 new @Readonly ArrayList() 

Определения на типа

 @NonNull String str; 

Тази декларация определя ненулева променлива str от тип, която Stringда се избягва NullPointerException.

 @NonNull Списък newList; 

Тази декларация определя ненулеви списък от тип String.

 List newList; 

Тази декларация определя списък с ненулеви стойности от тип String.

Типове отливки

 newStr = (@NonNull String) str; 

разширява и прилага клауза

 class Warning разширява @Localized Message 

клауза за хвърляне

 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.
  • Инструкции за изпълнение - Някои анотации могат да бъдат дефинирани, за да дадат инструкции на програмата по време на изпълнение. Тези анотации са достъпни с помощта на Java Reflection.

Интересни статии...