2012-08-02 17 views

Trả lời

18

Xác định chú thích với thuộc tính có tên value, thì thuộc tính tên thể được bỏ qua:

@interface CustomAnnotation 
{ 
    String value(); 
} 

Điều này có thể được sử dụng như sau:

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

Đừng biên dịch :(và trong Eclipse ném một lỗi nói rằng thiếu thuộc tính –

+0

Nhưng không công việc: (@Target (ElementType.METHOD) @Retention (RetentionPolicy.RUNTIME) public @interface Get { \t Tên chuỗi(); \t } => @Get ("hi") công khai khoảng trống() NÉM MỘT NGOẠI TRỪ –

+0

Cảm ơn! Nó hoạt động! :) –

7

Trích dẫn Annotations official documentation:

Nếu có chỉ là một yếu tố có tên là "value", sau đó tên có thể được bỏ qua, như trong:

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

Đây là cách chú thích này được định nghĩa:

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

Như bạn có thể thấy tài liệu không hoàn toàn đúng, các thuộc tính khác cũng được phép ("chỉ một phần tử"), xem WebServlet - nhưng thuộc tính được đặt tên value được xử lý khác nhau.

12

Bạn chỉ rõ thuộc tính có tên giá trị:

public @interface MyAnnotation { 

    String value(); 

} 

này không phải là thuộc tính chỉ khi họ có giá trị mặc định:

public @interface MyAnnotation { 

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

} 

Nhưng nếu bạn muốn gán một cách rõ ràng giá trị với thuộc tính không phải là giá trị, thì bạn phải gán giá trị một cách rõ ràng. Đó là để nói:

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

làm việc

nhưng

@MyAnnotatino("foo", myInteger = 1) 

không

Các vấn đề liên quan