2013-04-22 29 views
2

如何打印不同批註的批註值?如何獲取不同批註的值

我有以下兩個註解

@Retention(RetentionPolicy.RUNTIME) 
@Documented 
public @interface Author 
{ 
    String name() default "--Unknown--"; 
    String date() default "--Unknown--"; 
} 

@Retention(RetentionPolicy.RUNTIME) 
@Documented 
public @interface Revision 
{ 
    int version() default 0; 
    String modifiedBy() default "--Unknown--"; 
} 

現在一個班同時使用本註釋,這個類裏面我想顯示兩個註釋值註釋

@Author(
     name = "Panther", 
     date = "22.04.2013" 
     ) 

@Revision(
     version = 2, 
     modifiedBy = "Black", 
     ) 
public class AnnotationTest 
{ 
    public static void main(String[] args) 
    { 
     AnnotationTest b = new AnnotationTest(); 
     for(Annotation a : AnnotationTest.class.getDeclaredAnnotations()) 
     { 
      // for Author display name and date 
      // for revision display version and modifiedBy 
     } 
    } 
} 

有沒有辦法做到這一點?

回答

3

您可以使用instanceof

for (Annotation a : AnnotationTest.class.getDeclaredAnnotations()) { 
    if (a instanceof Author) { 
     Author author = (Author) a; 
     System.out.println("Author Name: " + author.name()); 
     System.out.println("Date: " + author.date()); 

    } else if (a instanceof Revision) { 
     Revision revision = (Revision) a; 
     System.out.println("Version: " + revision.version()); 
     System.out.println("Modified By: " + revision.modifiedBy()); 
    } 
} 
1

答案很簡單:

a.getClass().getAnnotation(Author.class).name(); 

這是通用的,所以getAnnotation將返回你要的類型,那麼你就可以直接拿到場。

相關問題