Android开发笔记(5):常量的合理使用

2021-01-28  本文已影响0人  叶满林

今天,我们来聊一些“细枝末节”的问题——java中的常量。觉得很有意思,给大家分享一下:

下面是我见过的几种常量定义操作:
1.普通款:

public class Constants {
    private Constants(){}
    public static final int MAX = Integer.MAX_VALU;//最大值
    public static final int MIN = Integer.MIN_VALU;//最小值
}

最简单的一种,需要定义成final且定义一个private的构造方法,这样做是为了不让其他类继承,禁止实例化此类,调用时直接以"类.常量"的方式调用。
当然,大部分时候,我们都放在相关的类里,而不是单独抽取出来。

2.接口

public interface Constants {
    int MAX = Integer.MAX_VALUE;//最大值
    int MIN = Integer.MIN_VALU;//最小值
}

接口中定义,接口中的"变量"默认都是 "public static final"类型,即为常量,因此接口可以省略。

3.枚举款(这个详细说一下)
假设服务端下发了一个“tag”字段,1代表通过,2代表不通过,3代表延期审核。枚举可以这样用:

public enum Constants {
    PASS(1),NOPASS(2),DELAY(3);
    
    private final int state;
    
    Constants(int state){
        this.state = state;
    }
    
    public int getstate() {
        return state;
    }
}
//使用
...
if (getUserState() == Constants.PASS.getstate()) {
    //此人审核未通过
} 

他的优点有啥呢?
(1)枚举常量更简单
枚举只需要定义每个枚举项,不需要定义枚举值。
(2)枚举常量属于稳态型
以上面的代码举例:得到数据以后getUserState(),普通常量,你需要判断边界值,比如获取的值为-1就会出现很多问题。而枚举只能是其中一个实例。
(3)扩展性强
有一天产品告诉你,现在需要根据状态相应颜色,分别是“红色”、“蓝色”、“白色”。
那么只要稍微改一下代码就完事了。

public enum Constants {
    PASS(1,Colors.red),NOPASS(2,Colors.buld),DELAY(3,,Colors.red);
    
    private final int state;
    private final int color;
    
    Constants(int state,int color){
        this.state = state;
        this.color =cor
    }
    
    public int getcolor() {
        return color;
    }
}

方法实现接口,demo(@Contract.Type int action) 用注解标明方法使用常量,增加了常量与方法的关联感

(4)注解款

  @IntDef({SELECT_ACHIEVEMENT, SELECT_TASK, SELECT_MEMBER, SELECT_BUY})
    @Retention(RetentionPolicy.SOURCE)
    @interface SelectBuyType {
    }
上一篇下一篇

猜你喜欢

热点阅读