专栏首页java达人硬编码,常量,枚举类

硬编码,常量,枚举类

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

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常见种用法

本文分享自微信公众号 - java达人(drjava),作者:卍极客

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2016-05-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 使用Redis做MyBatis的二级缓存

    使用Redis做MyBatis的二级缓存  通常为了减轻数据库的压力,我们会引入缓存。在Dao查询数据库之前,先去缓存中找是否有要找的数据,如果有则用缓存中的数...

    java达人
  • 源代码世界6—美人儿凯蒂

    “她还好吗?” 那大人眼睛里放出了一丝光,“你见过她吗?她可还记得卑微的码者,关河洲。”

    java达人
  • 数据库事务与隔离级别

    事务(transaction)是数据库管理系统的执行单位,可以是一个数据库操作(如Select操作)或者是一组操作序列。事务ACID属性,即原子性(Atomic...

    java达人
  • LeetCode 77. 组合(回溯)

    来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/combinations 著作权归领扣网络所有。商业...

    Michael阿明
  • 面试官:为什么mysql不建议执行超过3表以上的多表关联查询?

    前段时间在跟其他公司DBA交流时谈到了mysql跟PG之间在多表关联查询上的一些区别,相比之下mysql只有一种表连接类型:嵌套循环连接(nested-loop...

    本人秃顶程序员
  • 教程 | 遗传算法的基本概念和实现(附Java实现案例)

    选自Medium 作者:MallawaarachchiFollow 机器之心编译 参与:俞云开、蒋思源 基因遗传算法是一种灵感源于达尔文自然进化理论的启发式搜索...

    机器之心
  • hihoCoder 1051 补提交卡(贪心,枚举)

    #1051 : 补提交卡 时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho给自己定了一个宏伟的目标:连续100天每天坚持在hi...

    Angel_Kitty
  • Chrome 运行时性能瓶颈分析

    谷歌性能测试地址 https://googlechrome.github.io/devtools-samples/jank/ 可以看到如下的页面:

    ConardLi
  • 走过近30年,这个用逻辑程序表示数据的ML算法值得深入了解

    归纳逻辑程序设计(Inductive Logic Programming, ILP)是机器学习的一种形式。与基于统计的机器学习类似,ILP 也是需要给定一些例子...

    机器之心
  • 哥尼斯堡的“七桥问题”

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    喜欢ctrl的cxk

扫码关注云+社区

领取腾讯云代金券