硬编码,常量,枚举类

假如有一笔业务需要审核,审核状态分:未审核,审核中,审核通过,审核不通过。我们在程序里是否可以直接这么写:

  

      if(state==1){//1代表未操作

        //操作

      }else{

       //......

      }

   

将状态标识直接写在代码里面(硬编码),只图一时方便,却是后患无穷,如果有一天你需要修改状态标识,用0代表未审核而不是1,你不得不将所有与该标识相关的代码都找出来一个个改,另外,在编码过程中,标识输入错误的概率是比较高的,一不小心把0输入成了10,虽然不会提示任何编译错误,但运行结果将是出乎人的意料的。

 

于是我们很快想到可以用常量代替:

 public static final int UNAUDIT = 0;

相关判断代码则是:

 

 if(state==CONSTANT.UNAUDIT){

      //操作

    }else{

    //......

 }

 

这段代码比硬编码更加健壮容易维护,但是仍然有不足之处。

1、UNAUDIT是编译期常量,如果其值被改变,那么使用方需要重新编译。

2、没有简便的方法获取标识代表的字符串描述。

于是我们用枚举类来代替常量。

public enum AuditState {

   UNAUDIT(1),

   AUDITING(2),

   AUDIT_SUCCESS(3),

   AUDIT_FAIL(4);

   

   private final int statenum;

   

   AuditState(int statenum){

      this.statenum = statenum;

   }

 

   public int getStatenum() {

    return statenum;

   }

   

}

 

调用如下:

 

  if (state == AuditState.UNAUDIT.getStatenum()) {

  //AuditState.UNAUDIT.toString()获取字符串描述

   System.out.println(AuditState.UNAUDIT.toString() + "标识是 " 

    + AuditState.UNAUDIT.getStatenum());

  } else {

//......

  }

 

枚举类还有更加强大的功能,如添加字段,方法,还可以对他进行遍历访问,请看Java 枚举7常见种用法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值