V tomto tutoriálu se pomocí příkladů naučíme, co jsou anotace, různé anotace Java a jak je používat.
Anotace Java jsou metadata (data o datech) pro náš zdrojový kód programu.
Poskytují kompilátoru další informace o programu, ale nejsou součástí samotného programu. Tyto anotace nemají vliv na provedení kompilovaného programu.
Poznámky začínají @
. Jeho syntaxe je:
@ Název poznámky
Vezměme si příklad @Override
anotace.
Tyto @Override
anotace určuje, že metoda, která byla označena tímto anotace potlačí metodu rodičovské třídy se stejným názvem metody, návratový typ a seznam parametrů.
Není nutné použít @Override
při přepsání metody. Pokud jej však použijeme, kompilátor při přepisování metody zobrazí chybu, pokud je něco špatně (například nesprávný typ parametru).
Příklad 1: @Override Příklad anotace
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(); ) )
Výstup
Jsem pes.
V tomto příkladu je metoda displayInfo()
přítomna jak v nadtřídě Animal, tak v podtřídě Dog. Když je tato metoda volána, je volána metoda podtřídy místo metody v nadtřídě.
Formáty anotací
Anotace mohou také zahrnovat prvky (členy / atributy / parametry).
1. Popisky značek
Anotace značek neobsahují členy / prvky. Používá se pouze pro označení prohlášení.
Jeho syntaxe je:
@AnnotationName ()
Protože tyto anotace neobsahují prvky, lze závorky vyloučit. Například,
@ Přepis
2. Jeden prvek Anotace
Anotace jednoho prvku obsahuje pouze jeden prvek.
Jeho syntaxe je:
@AnnotationName (elementName = "elementValue")
Pokud existuje pouze jeden prvek, jedná se o konvenci pojmenování tohoto prvku jako hodnoty.
@AnnotationName (value = "elementValue")
V tomto případě lze také vyloučit název prvku. Název prvku bude ve výchozím nastavení hodnotou.
@AnnotationName ("elementValue")
3. Víceprvkové anotace
Tyto anotace obsahují více prvků oddělených čárkami.
Jeho syntaxe je:
@AnnotationName (element1 = "value1", element2 = "value2")
Umístění anotace
Jakékoli prohlášení lze označit anotací umístěním nad toto prohlášení. Od Java 8 lze anotace také umisťovat před typ.
1. Výše uvedená prohlášení
Jak již bylo zmíněno výše, anotace Java lze umístit nad deklarace třídy, metody, rozhraní, pole a dalších prvků programu.
Příklad 2: @SuppressWarnings Příklad anotace
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(); ) )
Výstup
Seznam slov => (program)
Pokud je výše uvedený program kompilován bez použití @SuppressWarnings("unchecked")
anotace, kompilátor bude program stále kompilovat, ale zobrazí varování jako:
Main.java používá nekontrolované nebo nebezpečné operace. Seznam slov => (program)
Dostáváme varování
Main.java používá nekontrolované nebo nebezpečné operace
z důvodu následujícího tvrzení.
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.
- Pokyny za běhu - Některé poznámky lze definovat, aby poskytovaly pokyny programu za běhu. K těmto anotacím se přistupuje pomocí Java Reflection.