Java 开发过程中枚举类的封装

本贴最后更新于 1651 天前,其中的信息可能已经时过境迁

前景

以前做 php 的时候,因为自己的代码修养不够,导致一个项目开发完成之后,出现一个很坑爹的问题,就是有很多魔术数字,比如用户的状态:正常 1 冻结 2 删除 3 整套项目下来 如果很多地方都会调用到的话,一旦出现这些枚举值要进行改动的场景,那简直是一场灾难,甚至枚举类的重要性!

创建枚举接口

这个借口创建之后,其他各种类型的枚举会去实现接口

package com.center.common.enumtype; /** * 枚举基类. */ public interface BaseEnum { /** * 获取描述 * @return */ String getDesc(); /** * 获取编码值(数据库存的) * @return */ Byte getCode(); }

创建数字类型的枚举类

整型的数字,字符串的数字,长整型的数字
这个主要用在一些判断结果值之类的场景

package com.center.common.enumtype; /** * 枚举 * @author javashishijieshangzuihaodeyuyan */ public class Constants { public interface Ints { Integer MINUS_ONE = -1; Integer ZERO = 0; Integer ONE = 1; Integer TWO = 2; Integer THREE = 3; Integer FOUR = 4; Integer FIVE = 5; Integer SIX = 6; Integer SEVEN = 7; Integer TEN = 10; } public interface Strings { String ZERO = "0"; String ONE = "1"; String TWO = "2"; String THREE = "3"; String FOUR = "4"; String HUNDRED="100"; String TEN = "10"; } public interface Longs { Long ZERO = 0L; Long ONE = 1L; Long TWO = 2L; Long THREE = 3L; Long FOUR = 4L; Long FIVE = 5L; Long SIX = 6L; Long SEVEN = 7L; Long TEN = 10L; } }
使用示范
# 读取的值 是整型的数字5 Constants.Ints.FIVE

映射数据库的一些 tinyint 类型字段的枚举

比如订单类型:0代表提现订单,1充值订单,2通道订单

package com.center.common.enumtype; /** * Description:订单类型 0用户订单1测试订单2正式订单 * */ public enum OrderTypeEnum implements BaseEnum { CASHOUT((byte)0, "用户订单"), RECHARGE((byte)1, "测试订单"), CHANNEL((byte)2, "正式订单"); private byte code; private String desc; OrderTypeEnum(byte code, String desc) { this.code = code; this.desc = desc; } @Override public String getDesc() { return this.desc; } @Override public Byte getCode() { return this.code; } }
使用示范
# 获取 数字 如:1 OrderTypeEnum.CASHOUT.getCode() # 获取描述 如:测试订单 OrderTypeEnum.CASHOUT.getDesc()

缓存常量枚举

这个是给 redis 读 key 的时候使用,不然每个地方都去写死字符串,
要改动的话,直接当场去世!

package com.pay.common; /** * 缓存常量 */ public interface CacheKeyContants { String IMG_CODE = "IMG_CODE"; String SESSION_USER = "SESSION_USER"; // 库 int DATABASE = 0; int ROB_DATABASE = 1; // KEY String KEY_ROB_USER= "KEY_ROB_USER"; String KEY_FUUID= "fuuid"; //时间 // 分钟 int ONE_MINUTE = 60; //一周 int ONE_WEEK = 86400 * 7; // 一天 int ONE_DAY = 86400; // 一小时 int ONE_HOUR = 3600; // 五分钟 int FIVE_MINUTES = 300; //key }
使用示范
#读取value CacheKeyContants.ROB_DATABASE

大致的枚举就可以按照第二个如法炮制
通过这样处理,整个项目的一些值清晰易懂,想改动也只需要改动一个地方!

  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3197 引用 • 8215 回帖
2 操作
zhangzeshan 在 2020-10-14 17:25:41 更新了该帖
zhangzeshan 在 2020-10-14 17:17:56 更新了该帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...