2009-02-25 5 views
41

Ich habe gerade diese Funktion entdeckt.@interface Standarddeklaration Verwendung in Java

Wenn Sie eine Schnittstelle mit der Syntax "@interface" deklarieren, können Sie einen Standardwert angeben.

public @interface HelloWorld { 
    public String sayHello() default "hello world"; 
} 

Das ist etwas Neues für mich. Wie soll dieser Standardwert verwendet werden?

Ich kann keinen Verweis auf das, weil die www voller Java-Schnittstelle Dokumente vor auf "@" zusätzlich in Java 1.5 (war es auf 0,5 oder 0,4?)


EDIT

Danke für die Antworten (ich war irgendwie nahe bei „Anmerkung“, denn ich den Tag bereits verwenden): P vor

ich wusste, ich sollte, dass Dokument Jahren gelesen habe !!! .. le t's siehe ...

Viele APIs erfordern eine große Menge an Standardcode. Für ...

+2

Und nicht mit Java 8 Standard-Interface-Methoden verwechselt werden: http://java.dzone.com/articles/interface-default-methods-java –

Antwort

55

Sie haben gerade eine annotation geschrieben.

In Bezug auf die default Anweisung insbesondere: Dies wird verwendet, weil Anmerkungen und Schnittstellen keine Konstruktoren haben können, so ist dies die einzige Möglichkeit, einen Standardwert für ein Anmerkungsattribut zu haben. Von :

Für ein Annotationstyp-Element kann ein Standardwert angegeben werden. Dies geschieht, indem Sie der (leeren) Parameterliste mit dem Schlüsselwort default und dem Standardwert des Elements folgen.

Die Standardwerte werden dynamisch zum Zeitpunkt des Lesens der Anmerkungen angewendet. Standardwerte werden nicht in Anmerkungen kompiliert. Daher wirkt sich die Änderung eines Vorschlagswerts auch auf Anmerkungen in Klassen aus, die vor der Änderung kompiliert wurden (vorausgesetzt, diesen Anmerkungen fehlt ein expliziter Wert für das vorgeschlagene Element).

Ich bemerke, dass keine der Anmerkungen in java.lang.annotation jedoch Standardwerte verwenden.


Verbrauch: Sie haben eine Anmerkung @HelloWorld mit einem Attribut sayHello. Man könnte es so auf eine Klasse setzen:

@HelloWorld(sayHello="Hi") 
public class MyClass { 
} 

Da Sie einen Standardwert haben, die Sie gerade

setzen könnte
@HelloWorld 
public class MyClass { 
} 

(Beachten Sie, dass das Dokument sagt: „In Anmerkungen mit einem einzigen Element, Das Element sollte value genannt werden; "Ich glaube, der einzige Grund dafür ist, dass Sie einfach @HelloWorld("Hi") schreiben könnten, ohne den Parameter benennen zu müssen.)

Wie beschrieben, kann Ihre Annotation für jedes gültige Programmelement (einschließlich Methoden und Variablendeklarationen) verwendet werden. Sie können dies mit der @Target Annotation ändern.

Schließlich können Sie mit der Einstellung RetentionPolicy entscheiden, ob die Annotation vom Compiler verworfen, von der VM verworfen oder immer beibehalten werden soll.


Zwei Pakete, die auch interessant sein könnte: javax.annotation und javax.annotation.processing. Und here ist ein Beispiel für die Verwendung der Annotationsverarbeitung für die Quellcodeanalyse.

+1

+1: Danke mmyers: Haben Sie eine Zusammenfassung für diese faul Programmierer? – OscarRyz

+0

Zusammenfassung von was? Alle Verwendungen von Anmerkungen? –

+1

Nein, nur der @interface-Verwendung ... Ich sehe den Link ... später: -/ – OscarRyz

4

Das ist ein annotation Sie deklarieren keine Schnittstelle. Es wurde in Java 1.5 hinzugefügt.

+0

+1. Oh ... ja, die Anmerkung. Ich denke, ich verwarne den Vortrag für diejenigen, als ich sagte: "Wenn ich ein Annotations-Bearbeitungs-Tool erstellen muss, werde ich dazu kommen." Heute schaute ich mir den Groovy-Quellcode an und das war das erste, was mich verwirrte. – OscarRyz

Verwandte Themen