2012-03-09 29 views
6

Tôi đang cố gắng chơi với sự phản chiếu và chú thích. Vì lý do nào đó bất cứ khi nào tôi thêm chú thích vào một trường (hoặc một lớp hoặc phương thức) và sử dụng sự phản chiếu để xem trường, tôi thấy trường annotations của nó là rỗng.reflect.Field.annotations luôn rỗng

Ví dụ, mã này:

public class Test { 
    public static void main(String[] args) throws NoSuchFieldException, SecurityException { 
     System.out.println(Test.class.getField("bl").getAnnotations().length); 
    }  
    @anno 
    public int bl;  

    public @interface anno {}  
} 

in 0.

BTW, Java không bỏ qua chú thích nói chung, và khi (ví dụ) Tôi sử dụng @Deprecated chú thích - Eclipse nhận nó và nói với tôi rằng lớp học không được chấp nhận.

Tôi đang sử dụng bản cập nhật Eclipse Indigo và Java SE Development Kit 2. Cảm ơn!

Trả lời

22

Theo mặc định, chú thích không có sẵn để phản ánh. Để làm như vậy, bạn cần phải thay đổi chính sách duy trì, ví dụ:

@Retention(RetentionPolicy.RUNTIME) 
public @interface Anno {}  

Các chính sách duy trì khác nhau có thể được tìm thấy trong Javadoc. Mặc định (vì những lý do bí ẩn mà không ai biết) là CLASS.

+0

skaffman - bạn là người đàn ông !! – Ginandi

+1

@Ginandi: Rất vui vì bạn đã nói vậy :) Ai đó vẫn nghĩ rằng nó đáng giá, bạn hãy chú ý ... – skaffman

+1

@skaffman Xin bạn có thể thay thế tiền thuê nhà để giữ chân –

4

Tôi sẽ kiểm tra @Retention, ví dụ:

@Documented 
@Retention(RetentionPolicy.RUNTIME) 
public @interface Deprecated { 
} 

Nếu bạn không đặt, nó sẽ không hiển thị khi chạy.

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