English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
In diesem Tutorial lernen wir durch Beispiele, was Annotierungen sind, verschiedene Java-Annotierungen und wie man sie verwendet.
Java-Annotierungen sind Metadaten unserer Programmquellcodes (Daten über Daten).
Sie liefern zusätzliche Informationen an den Compiler über das Programm, sind aber nicht Teil des Programms selbst. Diese Annotierungen beeinflussen nicht die Ausführung des kompilierten Programms.
Die Annotation beginnt mit @. Die Syntax ist:
@AnnotationName
Lassen Sie uns das Beispiel der @Override-Annotierung betrachten.
@Override-Annotierung spezifiziert, dass die Methode, die mit dieser Annotierung markiert ist, die gleiche Methode mit gleichem Namen, Rückgabetyp und Parameterliste der übergeordneten Klasse überschreibt.
Bei der Umsetzung von Methoden ist nicht zwingend die Verwendung von @Override erforderlich. Wenn wir es jedoch verwenden, gibt der Compiler im Falle eines Fehlers (z.B. falscher Parameterart) eine Fehlermeldung aus, wenn die Methode überschrieben wird.
class Animal { public void displayInfo() { System.out.println("Ich bin ein Tier."); } } class Dog extends Animal { @Override public void displayInfo() { System.out.println("Ich bin ein Hund."); } } class Main { public static void main(String[] args) { Dog d1 = new Dog(); d1.displayInfo(); } }
Ausgaberesultat
Ich bin ein Hund.
In diesem Beispiel ist die Methode displayInfo() sowohl im Überklasse Animal als auch im Unterklasse Dog vorhanden. Beim Aufruf dieser Methode wird die Methode des Unterklasses aufgerufen, nicht die Methode der Überklasse.
Annotationen können auch Elemente (Mitglieder/Eigenschaft/Parameter).
Markierungs-Annotationen enthalten keine Mitglieder/Element. Es wird nur zur Markierung von Deklarationen verwendet.
Seine Syntax ist:
@AnnotationName()
Da diese Annotationen keine Elemente enthalten, sind Klammern nicht erforderlich. Zum Beispiel,
@Override
Eine einzelne Element-Annotation enthält nur ein Element.
Seine Syntax ist:
@AnnotationName(elementName = "elementValue")
Wenn nur ein Element vorhanden ist, wird es häufig als value bezeichnet.
@AnnotationName(value = "elementValue")
In diesem Fall kann auch der Elementname entfernt werden. Der Standardname des Elements ist value.
@AnnotationName("elementValue")
Diese Annotationen enthalten mehrere durch Kommas getrennte Elemente.
Seine Syntax ist:
@AnnotationName(element1 = "value1", element2 = "value2")
Jegliche Deklaration kann durch Placing it above the declaration markiert werden. Ab Java 8Ab dem Anfang können Kommentare auch vor dem Typ platziert werden.
Wie erwähnt, können Java-Kommentare oben auf der Klasse, Methode, Schnittstelle, Feldern und anderen Programmierungs-Elementen platziert werden.
import java.util.*; class Main { @SuppressWarnings("unchecked") static void wordsList() { ArrayList wordList = new ArrayList<>(); //Dies führt zu unkontrollierten Warnungen wordList.add("w")3codebox"); System.out.println("Word list => " + wordList); } public static void main(String args[]) { wordsList(); } }
Ausgaberesultat
Word list => [w3codebox]
Falls der obige Code ohne @SuppressWarnings("unchecked")-Anmerkung kompiliert wird, wird der Compiler den Code weiterhin kompilieren, aber eine der folgenden Warnungen ausgeben:
Main.java verwendet unchecked oder unsichere Operationen. Word list => [w3codebox]
Wir erhalten eine Warnung
Main.java verwendet unchecked oder unsichere Operationen
weil folgender Anweisung.
ArrayList wordList = new ArrayList<>();
Dies liegt daran, dass wir den allgemeinen Typ der Arrayliste noch nicht definiert haben. Wir können diese Warnung durch Angabe eines Generikers in den eckigen Klammern <> lösen.
ArrayList<String> wordList = new ArrayList<>();
In Java 8Bisher konnten Anmerkungen nur auf Deklarationen angewendet werden. Jetzt können auch Typenotizen verwendet werden. Dies bedeutet, dass wir Anmerkungen an jedem Ort platzieren können, an dem ein Typ verwendet wird.
Konstruktoraufruf
new @Readonly ArrayList<>()
Typedefinition
@NonNull String str;
Diese Deklaration spezifiziert eine nicht-leere String-Variable str, um NullPointerException zu vermeiden.
@NonNull List<String> newList;
Diese Deklaration spezifiziert eine Liste von nicht-leeren String-Werten.
List<@NonNull String> newList;
Diese Deklaration spezifiziert eine Liste von nicht-leeren String-Werten.
TypumwandlungnewStr = (@NonNull String) str;
extends und implements Klauseln
class Warning extends @Localized Message
throws Klausel
public String readMethod() throws @Localized IOException
Typenotizen ermöglichen eine bessere Analyse von Java-Code und bieten eine stärkere Typprüfung.
1. Vorgegebene Annotierungen
@Deprecated
@Override
@SuppressWarnings
@SafeVarargs
@FunctionalInterface
2. Meta-Annotierungen
@Retention
@Documented
@Target
@Inherited
@Repeatable
3. Benutzerdefinierte Annotierungen
Diese Annotierungstypen inJava AnnotierungstypenEs gibt eine detaillierte Beschreibung im教程.
Kompiliereranweisungen - Kann verwendet werden, um dem Compiler Anweisungen bereitzustellen, Fehler zu erkennen oder Warnungen zu unterdrücken. Zum Beispiel die eingebauten Annotierungen @Deprecated, @Override, @SuppressWarnings.
Kompilationszeitanweisungen - Diese Kommentare bieten Anweisungen zur Kompilationszeit, die den Softwarebuild-Tools helfen, Code, XML-Dateien usw. zu generieren.
Laufzeitanweisungen - Man kann einige Annotierungen definieren, um dem Programm Anweisungen zur Laufzeit bereitzustellen. Diese Annotierungen werden über Java Reflection aufgerufen.