V tej vadnici bomo s pomočjo primerov izvedeli, kaj so pripisi, različni pripisi Java in kako jih uporabiti.
Pripisi Java so metapodatki (podatki o podatkih) za našo izvorno kodo programa.
Prevajalniku zagotavljajo dodatne informacije o programu, vendar niso del samega programa. Ti pripisi ne vplivajo na izvajanje prevedenega programa.
Pripisi se začnejo z @
. Njegova sintaksa je:
@AnnotationName
Vzemimo primer @Override
anotacije.
V @Override
zaznambe določa, da je metoda, ki je bila označena s tem pripisom preglasi metodo nadrazreda z istim imenom metode, vrsto vračanja, in seznam parametrov.
Uporaba ni obvezna @Override
pri razveljavitvi metode. Če pa jo uporabimo, prevajalnik med preglasitvijo metode prikaže napako, če je nekaj narobe (na primer napačna vrsta parametra).
Primer 1: Primer opombe @Override
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(); ) )
Izhod
Jaz sem pes.
V tem primeru je metoda displayInfo()
prisotna tako v superrazredu Žival kot v podrazredu Pes. Ko je ta metoda poklicana, se namesto metode v superrazredu pokliče metoda podrazreda.
Oblike zapiskov
Pripisi lahko vključujejo tudi elemente (člane / atribute / parametre).
1. Oznake označevalcev
Oznake označevalcev ne vsebujejo članov / elementov. Uporablja se samo za označevanje deklaracije.
Njegova sintaksa je:
@AnnotationName ()
Ker ti pripisi ne vsebujejo elementov, je oklepaje mogoče izključiti. Na primer
@Override
2. Enodelni pripisi
Pripis enega samega elementa vsebuje samo en element.
Njegova sintaksa je:
@AnnotationName (elementName = "elementValue")
Če je samo en element, je pravilo, da ta element poimenujemo kot vrednost.
@AnnotationName (value = "elementValue")
V tem primeru je mogoče izključiti tudi ime elementa. Ime elementa bo privzeto vrednost.
@AnnotationName ("elementValue")
3. Pripisi več elementov
Ti pripisi vsebujejo več elementov, ločenih z vejicami.
Njegova sintaksa je:
@AnnotationName (element1 = "vrednost1", element2 = "vrednost2")
Umestitev pripisov
Vsako izjavo lahko označimo s pripisom, tako da jo postavimo nad to izjavo. Od Jave 8 lahko pripise postavite tudi pred vrsto.
1. Nad izjavami
Kot smo že omenili, lahko pripise Java postavimo nad izjave razreda, metode, vmesnika, polja in drugih elementov programa.
Primer 2: Primer opombe @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(); ) )
Izhod
Seznam besed => (programiz)
Če je zgornji program preveden brez uporabe @SuppressWarnings("unchecked")
pripisov, ga bo prevajalnik še vedno prevedel, vendar bo dal opozorila, kot so:
Main.java uporablja nepreverjene ali nevarne operacije. Seznam besed => (programiz)
Dobili smo opozorilo
Main.java uporablja nepreverjene ali nevarne operacije
zaradi naslednje izjave.
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.
- Navodila za izvajanje - Nekatere pripise lahko definirate tako, da dajejo navodila programu med izvajanjem. Do teh pripisov lahko dostopate z uporabo Java Reflection.