Frage

Was ist der Zweck von Annotationen in Java?Ich habe diese vage Vorstellung davon, dass sie irgendwo zwischen einem Kommentar und tatsächlichem Code liegen.Beeinflussen sie das Programm zur Laufzeit?

Was sind ihre typischen Verwendungszwecke?

Sind sie einzigartig in Java?Gibt es ein C++-Äquivalent?

War es hilfreich?

Lösung

Anmerkungen werden hauptsächlich von Code verwendet, der anderen Code überprüft.Sie werden häufig zum Modifizieren (d. h.(Dekorieren oder Umhüllen) bestehender Klassen zur Laufzeit, um ihr Verhalten zu ändern.Frameworks wie JUnit Und Überwintern Verwenden Sie Annotationen, um die Menge an Code zu minimieren, die Sie selbst schreiben müssen, um die Frameworks zu verwenden.

Oracle hat eine gute Erklärung des Konzepts und seiner Bedeutung in Java auf ihrer Website.

Andere Tipps

Sind sie außerdem einzigartig für Java? Gibt es ein C++-Äquivalent?

Nein, aber VB und C# schon Attribute die dasselbe sind.

Ihre Verwendung ist sehr vielfältig.Ein typisches Java-Beispiel: @Override hat keine Auswirkungen auf den Code, kann jedoch vom Compiler verwendet werden, um eine Warnung (oder einen Fehler) zu generieren, wenn die dekorierte Methode nicht tatsächlich eine andere Methode überschreibt.Ebenso können Methoden als veraltet markiert werden.

Dann gibt es Reflexion.Wenn Sie einen Klassentyp in Ihrem Code widerspiegeln, können Sie auf die Attribute zugreifen und entsprechend den dort gefundenen Informationen handeln.Ich kenne keine Beispiele in Java, aber in .NET wird dies vom Compiler zum Generieren verwendet (De)Serialisierung Informationen für Klassen, bestimmen Sie die Speicherlayout von Strukturen und Funktionsimporte deklarieren aus älteren Bibliotheken (unter anderem).Sie steuern auch, wie der IDE-Formulardesigner funktioniert.

/BEARBEITEN:Attribute für Klassen sind vergleichbar mit Tag-Schnittstellen (wie Serialisierbar in Java).In den .NET-Codierungsrichtlinien heißt es jedoch, keine Tag-Schnittstellen zu verwenden.Außerdem funktionieren sie nur auf Klassenebene, nicht auf Methodenebene.

Anders gibt eine gute Zusammenfassung und hier ist ein Beispiel einer JUnit-Annotation

@Test(expected=IOException.class)
public void flatfileMissing() throws IOException {
    readFlatFile("testfiles"+separator+"flatfile_doesnotexist.dat");
}

Hier das @Test Die Annotation teilt JUnit mit, dass die flatfileMissing Methode ist ein Test, der ausgeführt werden soll und dessen erwartetes Ergebnis ein geworfener Wert ist IOException.Wenn Sie also Ihre Tests ausführen, wird diese Methode aufgerufen und der Test wird bestanden oder schlägt fehl, je nachdem, ob ein IOException ist geworfen.

Java verfügt außerdem über das Annotation Processing Tool (apt), mit dem Sie nicht nur Annotationen erstellen, sondern auch entscheiden, wie diese Annotationen auf den Quellcode wirken.

Hier ist eine Einführung.

Um einige coole Dinge zu sehen, die Sie mit Annotations machen können, schauen Sie sich hier um meine JavaBean-Annotationen und Annotationsprozessor.

Sie eignen sich hervorragend zum Generieren von Code und zum Hinzufügen zusätzlicher Validierungen während Ihres Builds, und ich habe sie auch für ein Fehlermeldungs-Framework verwendet (noch nicht veröffentlicht – muss mit den Vorgesetzten geklärt werden ...).

Per wörtlicher Definition fügt eine Anmerkung einem Element Notizen hinzu.Ebenso sind Java-Annotationen Tags, die wir in den Quellcode einfügen, um weitere Informationen über den Code bereitzustellen.Java-Annotationen verknüpfen Informationen mit dem annotierten Programmelement.Neben Java-Annotationen verfügen Java-Programme über zahlreiche informelle Dokumentationen, die normalerweise in Kommentaren in der Quellcodedatei enthalten sind.Java-Anmerkungen unterscheiden sich jedoch von Kommentaren. Sie kommentieren die Programmelemente direkt, indem sie Annotationstypen verwenden, um die Form der Anmerkungen zu beschreiben.Java-Annotationen stellen die Informationen auf standardisierte und strukturierte Weise dar, sodass sie von Verarbeitungstools problemlos verwendet werden können.

Zum ausführlichen Nachlesen gibt es ein schönes Tutorial dazu Java-Anmerkungen

Wann verwenden Sie die @Override-Annotation von Java und warum?Der Link bezieht sich auf eine Frage, wann man die Override-Annotation (@override) verwenden sollte.Dies könnte helfen, das Konzept der Annotation besser zu verstehen. Schauen Sie sich das an.

Anmerkungen, wenn es um EJB geht, wird als Auswahl impliziten Mittelwarenansatz für einen expliziten Ansatz mit mittlerer Ware bezeichnet. Wenn Sie Annotation verwenden, können Sie das anpassen, was Sie genau von der API benötigen :ohne Anmerkung zu verwenden:Der Code wird sein

transfer(Account account1, Account account2, long amount)    
{
   // 1: Call middleware API to perform a security check
   // 2: Call middleware API to start a transaction
   // 3: Call middleware API to load rows from the database
   // 4: Subtract the balance from one account, add to the other
   // 5: Call middleware API to store rows in the database
   // 6: Call middleware API to end the transaction
}

Während der Verwendung von Anmerkungen enthält Ihr Code keine umständlichen API-Aufrufe, um die Middle-Ware-Dienste zu verwenden.Der Code ist sauber und auf Geschäftslogik ausgerichtet

transfer(Account account1, Account account2, long amount) 
{
   // 1: Subtract the balance from one account, add to the other
}

Anmerkungen, eine Form von Metadaten, stellen Daten über ein Programm bereit, die nicht Teil des Programms selbst sind.Anmerkungen haben keinen direkten Einfluss auf die Funktionsweise des Codes, den sie mit Anmerkungen versehen.

Anmerkungen haben eine Reihe von Verwendungsmöglichkeiten, darunter:

  • Informationen für den Compiler — Anmerkungen können vom Compiler verwendet werden, um Fehler zu erkennen oder Warnungen zu unterdrücken.
  • Verarbeitung zur Kompilierungszeit und zur Bereitstellungszeit – Softwaretools können Anmerkungsinformationen verarbeiten, um Code, XML-Dateien usw. zu generieren.
  • Laufzeitverarbeitung — Einige Anmerkungen können zur Laufzeit untersucht werden.

Der Sichtbarkeitsbereich wird definiert durch java.lang.annotation.RetentionPolicy Konstanten SOURCE, CLASS, Und RUNTIME

  • RetentionPolicy.SOURCE:Die Anmerkung wäre im Quellcode des Programms verfügbar und kann vom Compiler oder verwendet werden geeignet zur Codegenerierung.
  • RetentionPolicy.CLASS:Die Anmerkung würde sich in der .class-Datei befinden, wäre aber zur Laufzeit nicht verfügbar.Wird von Tools zur Bytecode-Manipulation verwendet, z ASM die Änderungen durchführen
  • RetentionPolicy.RUNTIME:Die Anmerkung wäre in der .class-Datei und zur Laufzeit verfügbar und kann über Java Reflection über getAnnotations() überprüft werden.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top