2017-09-17 162 views
0

閱讀How to set String Array in Java Annotation註釋參數 - 的String []類型的參數設置爲字符串字面

我有一個查詢,爲下面的代碼:

@Unfinished("Just articleware") 
public @interface Unfinished { 
    public enum Priority {LOW, MEDIUM, HIGH} 
    String value(); 
    String[] owners() default ""; 
    Priority priority() default Priority.MEDIUM; 
} 

期待語法String[] owners() default {}。 Java編譯器如何允許字符串文字語法("")爲String[]類型參數(owners)?

+1

兩個版本都可以接受。 'default「」'就像'default {「」}'所以默認值是* 1 *元素的數組:空字符串。如果你設置了'default {}',那麼默認值是* empty * array。 – Pshemo

+0

帶有空字符串的數組。你也可以在那裏放一個單一的字符串「default」,或者簡單地爲一個空數組。 – nullpointer

回答

1

如註釋中所標記的,註釋密鑰owners的默認值""將創建一個數組,其元素爲空字符串。你也可以把一個字符串"default"在那裏,以及這將導致只是爲了如果需要爲空數組創建僅值「默認」的數組

OR

{}


爲了測試這一點,你可以標記與運行時保留策略註解爲:

@Unfinished("Just articleware") 
@Retention(RetentionPolicy.RUNTIME) // mark with Runtime retention policy 
public @interface Unfinished { 
    enum Priority {LOW, MEDIUM, HIGH} 

    String value(); 

    String[] owners() default ""; 

    Priority priority() default Priority.MEDIUM; 
} 

註釋本

@Unfinished(value = "") 
public class AnnotatedClass { 

    public static void main(String[] args) { 
     System.out.println(""); 
    } 
} 

,然後使用反射來獲取的值的類Unfinished的密鑰爲:

public static void main(String[] args) throws Exception { 
    System.out.println("Testing..."); 
    Class<AnnotatedClass> obj = AnnotatedClass.class; 
    if (obj.isAnnotationPresent(Unfinished.class)) { 
     Annotation annotation = obj.getAnnotation(Unfinished.class); 
     Unfinished unfinished = (Unfinished) annotation; 
     System.out.println(Arrays.toString(unfinished.owners())); 
    } 
} 
相關問題