2012-08-02 17 views

Odpowiedz

18

Zdefiniuj adnotacji z atrybutem o nazwie value, następnie atrybutu nazwa można pominąć:

@interface CustomAnnotation 
{ 
    String value(); 
} 

ten może być stosowany tak:

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

Nie skompilować :(aw Eclipse rzucać błąd mówiąc brakuje atrybutu –

+0

Ale nie robi jeszcze pracować :(@Target (ElementType.METHOD) @ Realizacja (RetentionPolicy.RUNTIME) public @interface Uzyskaj { \t Nazwa ciągu(); \t } => @Get ("cześć") publiczne wstawianie void() WYKLUCZA WYJĄTEK –

+0

Dzięki! To działa! :) –

7

Cytowanie Annotations official documentation:

Jeżeli istnieje tylko jeden element o nazwie "value", a następnie nazwa może zostać pominięte, na przykład:

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

To jest jak ta adnotacja jest zdefiniowana:

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

Jak możesz zobaczyć, że dokumentacja nie jest w pełni poprawna, inne atrybuty są również dozwolone ("tylko jeden element"), patrz WebServlet - ale ten o nazwie value jest traktowany różnie.

12

określić atrybut o nazwie wartość:

public @interface MyAnnotation { 

    String value(); 

} 

To nie musi być jedynym atrybutem, jeśli mają wartości domyślne:

public @interface MyAnnotation { 

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

} 

Ale jeśli chcesz jawnie przypisać wartość do atrybutu innego niż wartość, musisz wtedy jawnie przypisać wartość. To znaczy:

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

działa

ale

@MyAnnotatino("foo", myInteger = 1) 

nie