2013-07-28 24 views
31

Tôi đã tạo ra loại chú thích của riêng tôi như thế này:Làm thế nào để có được chú thích lớp trong java?

public @interface NewAnnotationType {} 

và gắn nó vào một lớp học:

@NewAnnotationType 
public class NewClass { 
    public void DoSomething() {} 
} 

và tôi đã cố gắng để có được những chú thích lớp thông qua phản ánh như thế này:

Class newClass = NewClass.class; 

for (Annotation annotation : newClass.getDeclaredAnnotations()) { 
    System.out.println(annotation.toString()); 
} 

nhưng không in được gì. Tôi đang làm gì sai?

+1

Trừ khi đánh dấu rõ ràng để chú thích chỉ có sẵn tại thời gian biên dịch. –

Trả lời

38

Chính sách lưu giữ mặc định là RetentionPolicy.CLASS có nghĩa là, theo mặc định, thông tin chú thích không được giữ lại trong thời gian chạy:

Chú thích được được ghi lại trong tập tin lớp bởi trình biên dịch nhưng không cần phải được giữ lại bởi các VM tại thời gian chạy. Đây là hành vi mặc định.

Thay vào đó, sử dụng RetentionPolicy.RUNTIME:

Chú thích sẽ được ghi lại trong tập tin lớp bởi trình biên dịch và giữ lại bởi VM tại thời gian chạy, vì vậy họ có thể được đọc phản tư.

... mà bạn chỉ định bằng cách sử dụng @Retention meta-annotation:

@Retention(RetentionPolicy.RUNTIME) 
public @interface NewAnnotationType { 
} 
+0

ok, có cách nào để thay đổi điều đó không? –

+1

sau khi xây dựng lại nó hoạt động :) cảm ơn –

+1

[Nó hoạt động cho tôi.] (Http://ideone.com/AMTHsM) –

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