Š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 @Override
anotācijas piemēru .
Šīs @Override
anotā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
@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.
- 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.