在我们开发企业级应用中,有时候会有这样的需求,需要定义一些常量,比如数字1 代表一个含义,数字2代表一个含义。
为了方便讲解,我们这里假设需要定义订单状态。
在这种情况下,对于初级程序员可能就会这样定义
这里每一个数字代表一个订单状态,这样设计虽然也能满足需求,但是会存在一些问题:
如果开发没有很好的注释,那么可能开发一段时间后你自己就忘了订单状态的含义
如果今后项目交接后,接收你项目的人找不到充足的注释那么很难理解每个状态的含义。
如果今后增加了新的订单状态,但是注释没有更新,那么新人接手很可能会出现问题。
那么有没有什么更好的解决方法呢?
答案是肯定的,那就是使用Java中的枚举类型。
配置好后,如果我们想在业务逻辑中使用就可以这样调用:
或者这样进行赋值
这样写的话,有一个好处就是当每个数字代表的含义发生变化,
比如“待评价”要改成“已收货”或新增订单状态类型的时候,就不需要在程序中到处去找,去修改,只需修改枚举类中的配置即可。
但是以上其实还存在一个问题,那就是订单状态数字如果还是写死的,那么是不完美的。
其实我们完全还可以针对上面的程序在做一个优化。
经过上面的学习,聪明的你会发现:
我们使用了OrderStatusEnum.values()的方法,遍历了所有的枚举类型。
然后在循环中做了判断,大大简化并优化了代码的编写和维护。
到这里,基本上枚举类型的基础用法就讲完了。
不过,博主打算再分享一个系统设计方法。
我们前面提到
如果我们想直接返回订单状态列表(包括订单状态数字和显示标签),不需要做判断,那么应该怎么做呢?
这时候其实我们可以这样,先封装一个所有枚举类型通用的VO类——EnumDicVO。
然后遍历所有的枚举类型,并封装一个获取所有枚举类型code和标签的静态方法即可。
最后由于这个方法可能会在很多地方都会调用,因此我们直接封装到枚举类中。
最终优化版本如下:
值得注意的是,
WAIT_PAY 是静态值对象,并不是实例化成员属性值
这样我们无论在哪里想要获取这个枚举类型列表都可以这样调用就行了:
输出结果:
实际UI效果:
本篇完~