2017-10-17 63 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 

这些不同的用途正在改变可读性。

他们都是接受,但选择是最有意义的一个为您的设计。

好运

埃姆雷