2017-10-17 93 views
0

這兩個聲明有什麼區別?Int Def聲明Java

public static final int a = 0; 
    public static final int b = 1; 
    public static final int c = 2; 

    @IntDef({a, b, c}) 
    @Retention(RetentionPolicy.SOURCE) 
    public @interface SomeIntDef { 
    } 

@IntDef({a, b, c}) 
    @Retention(RetentionPolicy.SOURCE) 
    public @interface SomeIntDef { 
     int a = 0; 
     int b = 1; 
     int c = 2; 
    } 

我的意思是最好的做法還是有以下兩個聲明之間的技術差異。

+0

前者定義'int'的三個可能的值;後者沒有定義任何可能的值,而是將3個字段(沒有語義含義)與缺省值添加到註釋中。 –

回答

0

是的,有一些區別。

public static final int a = 0; 
    public static final int b = 1; 
    public static final int c = 2; 

    @IntDef({a, b, c}) 
    @Retention(RetentionPolicy.SOURCE) 
    public @interface SomeIntDef { 
    } 

您正在聲明來自SomeIntDef的錨(父)類的靜態字段。因此,這是您如何引用它

YourParentClass.a 

在另一方面,

@IntDef({a, b, c}) 
    @Retention(RetentionPolicy.SOURCE) 
    public @interface SomeIntDef { 
    int a = 0; 
    int b = 1; 
    int c = 2; 
    } 

你要引用類似的

ParentClass.SomeIntDef.a 

你也可以寫爲獨立的階級。 (創建於另一個java文件一個新的註釋),這使得使用

SomeIntDef.a 

這些不同的用途正在改變可讀性。

他們都是接受,但選擇是最有意義的一個爲您的設計。

好運

埃姆雷