2015-06-27 10 views
5

In diesem example unter Annotationstyp (@interface):Welchen Vorteil hat die Verwendung von Annotationen über den Schnittstellentyp?

@interface ClassPreamble { 
     String author(); 
     String date(); 
     int currentRevision() default 1; 
     String lastModified() default "N/A"; 
     String lastModifiedBy() default "N/A"; 
     // Note use of array 
     String[] reviewers(); 
    } 

wird auf interface Art zusammengestellt:

interface annotationtype.ClassPreamble extends java.lang.annotation.Annotation{ 
    public abstract java.lang.String author(); 
    public abstract java.lang.String date(); 
    public abstract int currentRevision(); 
    public abstract java.lang.String lastModified(); 
    public abstract java.lang.String lastModifiedBy(); 
    public abstract java.lang.String[] reviewers(); 
} 

So wird die Annotation Typ interface Typ, vor der Laufzeit kompiliert zu werden.

In Java, Was ist der Vorteil der Verwendung von Annotation Typ (@interface) über die interface Art?

Antwort

6

Schnittstellen sind eine Technik zur Objektmodellierung, mit der Objekte Verhalten (aber nicht Status) implementieren können, die mehreren Typen zugeordnet sind.

Anmerkungen sind eine Technik zum Einbetten typisierter Metadaten in Ihren Code. Diese Metadaten sollen von Tools konsumiert werden (Test-Frameworks, Codegeneratoren usw.), aber sie haben keine Semantik auf Sprachenebene. Man könnte sie sich als strukturierte/typisierte Kommentare vorstellen, die an bestimmte Programmelemente angehängt sind und auf die über Reflektion zugegriffen werden kann.

Unter der Haube sind Annotationen als Schnittstellen implementiert, größtenteils aus Bequemlichkeit, aber die Ähnlichkeit ist wahrscheinlich verwirrender als hilfreich, um zu verstehen, wozu sie dienen.

+0

In Bezug auf die Übersetzung, enum-Typ kompiliert zu "final class". Aber Enum-Typ ist für einen anderen Zweck als Klasse. 'class' wird für die Objektmodellierung verwendet. Ist das eine gute Analogie? – overexchange

+2

Enum-Typen sind ein Beispiel, bei dem ein Muster in die Sprache gezogen wurde. Wenn Java keine Enum-Klassen hätte, könnte man immer noch den gleichen Effekt erzielen, indem man ein Muster codiert - nur mit mehr Ausführlichkeit. Das Enumerieren von Kompilieren in Klassen ist kein zufälliger Zufall, da das "Enum-Muster" im Wesentlichen von Klassen ausgedrückt wird. Anmerkungen scheinen mir ziemlich anders zu sein. –

+0

Für Ihren Punkt: "** Schnittstellen, die es Objekten ermöglichen, Verhaltensweisen zu implementieren **". Kann ich anders formulieren als: "Schnittstellen erlauben Objekten, periphere (Nicht-Kern-) Verhaltensweisen zu implementieren?" Aus Referenz ** Artikel-18: Schnittstellen sind ideal für die Definition von Mixins **. Zum Beispiel: 'compareTo()' Verhalten von 'interface Comparable'. – overexchange

5

Wenn Sie manuell den Compiler automatisch ausführen, würden Sie keine Annotation definieren. Nach Oracle documentation,

eine Schnittstelle, die nicht manuell [java.lang.annotation.Annotation] eine Annotation Typ nicht erstreckt definieren.

Daher ist @interface Syntax erforderlich, um eine Anmerkung in Java zu definieren.

Verwandte Themen