前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >硬编码,常量,枚举类

硬编码,常量,枚举类

作者头像
java达人
发布2018-01-31 18:26:53
1.6K0
发布2018-01-31 18:26:53
举报
文章被收录于专栏:java达人java达人

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

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

//操作

}else{

//......

}

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

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

public static final int UNAUDIT = 0;

相关判断代码则是:

if(state==CONSTANT.UNAUDIT){

//操作

}else{

//......

}

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

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

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

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

代码语言:js
复制
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;
   }
}

调用如下:

代码语言:js
复制
 if (state == AuditState.UNAUDIT.getStatenum()) {
 //AuditState.UNAUDIT.toString()获取字符串描述
   System.out.println(AuditState.UNAUDIT.toString() + "标识是 " 
    + AuditState.UNAUDIT.getStatenum());
  } else {
//......
  }

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-05-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 java达人 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档