2012-08-02 11 views

Antwort

18

Definieren Sie die Anmerkung mit einem Attribut value genannt, dann das Attribut Name verzichtet werden kann:

@interface CustomAnnotation 
{ 
    String value(); 
} 

Dies kann wie so verwendet werden:

@CustomAnnotation("/main") 
// ... 
+0

nicht kompilieren :(und in Eclipse einen Fehler werfen sagen Attribut fehlt –

+0

Aber nicht Arbeit noch :(@Target (ElementType.METHOD) @Retention (RetentionPolicy.RUNTIME) öffentliche @interface Get { \t String name(); \t } => @Get ("hi") öffentliche void inserir() THROWS eine Ausnahme –

+0

Vielen Dank! Es klappt! :) –

7

Zitiert Annotations official documentation:

Wenn es nur ein Element mit dem Namen ist "value", dann kann der Name weggelassen wird, wie in:

@SuppressWarnings("unchecked") 
void myMethod() { } 

Dies ist, wie diese Anmerkung definiert:

public @interface SuppressWarnings { 
    String[] value(); 
} 

Wie Sie können sehen, die Dokumentation ist nicht ganz richtig, andere Attribute sind ebenfalls erlaubt ("nur ein Element"), siehe WebServlet - aber der eine mit der Bezeichnung value ist behandelt anders.

12

Sie geben ein Attribut namens Wert:

public @interface MyAnnotation { 

    String value(); 

} 

Dies muss nicht das einzige Attribut sein, wenn sie Standardwerte haben:

public @interface MyAnnotation { 

    String value(); 
    int myInteger() default 0; 

} 

Aber wenn Sie wollen, explizit einen Wert zuweisen Zu dem Attribut, das nicht Wert ist, müssen Sie explizit Wert zuweisen. Das heißt:

@MyAnnotation("foo") 
@MyAnnotation(value = "foo", myInteger = 1) 

arbeitet

aber

@MyAnnotatino("foo", myInteger = 1) 

nicht