Šioje pamokoje su pavyzdžių pagalba sužinosime, kas yra anotacijos, skirtingos „Java“ anotacijos ir kaip jas naudoti.
„Java“ anotacijos yra mūsų programos šaltinio kodo metaduomenys (duomenys apie duomenis).
Jie pateikia kompiliatoriui papildomos informacijos apie programą, tačiau nėra pačios programos dalis. Šios anotacijos neturi įtakos sudarytos programos vykdymui.
Anotacijos prasideda @
. Jo sintaksė yra:
@AnnotationName
Paimkime @Override
anotacijos pavyzdį .
Į @Override
anotacija nurodoma, kad metodas, kuris buvo pažymėtas šiuo anotacija viršesnis už superclass su tuo pačiu metodu pavadinimas, grąžinimo tipo ir parametrų sąrašo metodą.
Neprivaloma naudoti, @Override
kai viršijamas metodas. Tačiau jei mes jį naudojame, kompiliatorius pateikia klaidą, jei kažkas neteisingas (pvz., Neteisingas parametro tipas), nepaisydamas metodo.
1 pavyzdys: @ nepaisyti anotacijos pavyzdžio
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(); ) )
Rezultatas
Aš esu šuo.
Šiame pavyzdyje metodas displayInfo()
yra ir superklasės gyvūnų, ir poklasio šunų. Kai šis metodas yra vadinamas, poklasio metodas vadinamas vietoj metodo superklase.
Anotacijų formatai
Anotacijose taip pat gali būti elementų (nariai / atributai / parametrai).
1. Žymeklio anotacijos
Žymeklio anotacijose nėra narių / elementų. Jis naudojamas tik deklaracijai žymėti.
Jo sintaksė yra:
@AnnotationName ()
Kadangi šiose anotacijose nėra elementų, skliaustų galima išskirti. Pavyzdžiui,
@ Nepaisyti
2. Vieno elemento anotacijos
Vieno elemento anotacijoje yra tik vienas elementas.
Jo sintaksė yra:
@AnnotationName (elementNAME = "elementValue")
Jei yra tik vienas elementas, įprasta tą elementą įvardyti kaip vertę.
@AnnotationName (reikšmė = "elementValue")
Tokiu atveju galima išskirti ir elemento pavadinimą. Pagal numatytuosius nustatymus elemento pavadinimas bus vertė.
@AnnotationName ("elementValue")
3. Kelių elementų anotacijos
Šiose anotacijose yra keli kableliais atskirti elementai.
Jo sintaksė yra:
@AnnotationName (elementas1 = "reikšmė1", elementas2 = "reikšmė2")
Anotacijų talpinimas
Bet kurią deklaraciją galima pažymėti anotacijomis, dedant ją virš tos deklaracijos. Nuo „Java 8“ anotacijos taip pat gali būti dedamos prieš tipą.
1. Virš deklaracijų
Kaip minėta aukščiau, „Java“ anotacijos gali būti išdėstytos virš klasės, metodo, sąsajos, lauko ir kitų programos elementų deklaracijų.
2 pavyzdys: @SuppressWarnings anotacijos pavyzdys
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(); ) )
Rezultatas
Žodžių sąrašas => (programiz)
Jei pirmiau minėta programa yra kompiliuojama nenaudojant @SuppressWarnings("unchecked")
anotacijos, kompiliatorius vis tiek sukompiliuos programą, tačiau duos tokius įspėjimus:
„Main.java“ naudoja nepatikrintas arba nesaugias operacijas. Žodžių sąrašas => (programiz)
Gauname įspėjimą
„Main.java“ naudoja nepatikrintas arba nesaugias operacijas
dėl šio teiginio.
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.
- Vykdymo nurodymai - kai kurias anotacijas galima apibrėžti, kad programos pateiktų vykdymo metu. Šias anotacijas galite pasiekti naudodami „Java Reflection“.