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