当前位置:网站首页>枚举通用接口&枚举使用规范
枚举通用接口&枚举使用规范
2022-07-06 20:18:00 【InfoQ】
- 数据表里字段值为有穷序列的字段,对应到程序里特定的枚举。字段数据类型尽量用varchar取代int(或tinyint)。毋庸置疑,字母组合总比0、1、2、3这样的数字易于识别。
- 数据表字段如果有对应的枚举,则,在字段注释上要标明枚举类名,方便程序溯源。
- 枚举一般有两部分,一个是枚举项值,一个是枚举描述。那么,这两个属性怎么命名呢? code和desc?还是value和desc?还是key和value?本文重点针对这个问题阐述。
@Getter
@AllArgsConstructor
public enum LevelEnum {
FIRST("FIRST", "一级"),
SECOND("SECOND", "二级"),
THIRD("THIRD", "三级");
private String code;
private String value;
public static LevelEnum getBeanByCode(String code) {
LevelEnum[] statusEnums = LevelEnum.values();
for (LevelEnum v : statusEnums) {
if (v.getCode().equals(code)) {
return v;
}
}
return null;
}
}
@Getter
@AllArgsConstructor
public enum OrderStatusEnum {
INIT("INIT", "初始"),
ACCOUNTING("ACCOUNTING", "记账中"),
SUCCESS("SUCCESS", "付款成功"),
FAILED("FAILED", "付款失败");
private String key;
private String description;
public static OrderStatusEnum getBeanByCode(String code) {
OrderStatusEnum[] values = OrderStatusEnum.values();
for (OrderStatusEnum v : values) {
if (v.getKey().equals(code)) {
return v;
}
}
return null;
}
}
@AllArgsConstructor
public enum ProductEnum {
BOSSKG("BOSS开工"),
HUICHUXING("惠出行"),
SICHEBANGONG("私车办公"),
YOUFU("优付"),
UNKNOWN("未知"),
;
private String description;
private String getCode(){
return this.toString();
}
public String getDescription() {
return description;
}
public static ProductEnum getBean(String value) {
ProductEnum[] values = ProductEnum.values();
for(ProductEnum temp : values){
if(temp.getCode().equals(value)){
return temp;
}
}
return ProductEnum.UNKNOWN;
}
}
@Getter
@AllArgsConstructor
public enum SeasonEnum {
SPRING(1, "春"),
SUMMER(2, "夏"),
AUTUMN(3, "秋"),
WINTER(4, "冬");
private int code;
private String description;
public static SeasonEnum getBeanByCode(Integer code) {
if (null == code) return null;
SeasonEnum[] values = SeasonEnum.values();
for (SeasonEnum temp : values) {
if (temp.getCode() == code) {
return temp;
}
}
return null;
}
}
/**
* 如若枚举名称和实际值不同,请务必重写getKey方法
* 枚举定义规范:枚举名切记大写,描述尽量清晰,不要出现错误拼写,请自觉仔细检查
* 例如:
* MONDAY("星期一"),
* TUESDAY("星期二")
*
* @author shaozhengmao
* @create 2021-06-21 10:18 上午
*/
public interface EnumAbility<T> {
/**
* 返回枚举实际值
* @return
*/
T getCode();
/**
* 返回枚举描述
*
* @return 枚举说明
*/
String getDescription();
/**
* 对比当前枚举对象和传入的枚举值是否一致(String类型会忽略大小写)
* 当前枚举项是否匹配远端传入的值(比如:数据库的字段值、rpc传入的参数值)
*
* @param enumCode 枚举code
* @return 是否匹配
*/
default boolean codeEquals(T enumCode) {
if (enumCode == null) return false;
if (enumCode instanceof String) {
return ((String) enumCode).equalsIgnoreCase((String) getCode());
} else {
return Objects.equals(this.getCode(), enumCode);
}
}
/**
* 对比两个枚举项是否完全相同(==)
*
* @param anotherEnum 枚举
* @return 是否相同
*/
default boolean equals(EnumAbility<T> anotherEnum) {
return this == anotherEnum;
}
}
@Getter
@AllArgsConstructor
public enum LevelEnum implements EnumAbility<String> {
FIRST("FIRST", "一级"),
SECOND("SECOND", "二级"),
THIRD("THIRD", "三级");
private String code;
private String value;
@Override
public String getDescription() {
return value;
}
/**
* 2021-12-18 23:00 zhanggz:本方法存在歧义,请使用{@link #getDescription()}
* @return
*/
@Deprecated
public String getValue() {
return value;
}
public static LevelEnum getBeanByCode(String code) {
return (LevelEnum) EnumAbilityUtil.getEnumByCode(LevelEnum.class, code);
}
}
@Getter
@AllArgsConstructor
public enum OrderStatusEnum implements EnumAbility<String> {
INIT("INIT", "初始"),
ACCOUNTING("ACCOUNTING", "记账中"),
SUCCESS("SUCCESS", "付款成功"),
FAILED("FAILED", "付款失败");
private String key;
private String description;
@Override
public String getCode() {
return key;
}
/**
* 2021-12-18 23:00 zhanggz:本方法存在歧义,请使用{@link #getCode()}
* @return
*/
@Deprecated
public String getKey() {
return key;
}
public static OrderStatusEnum getBeanByCode(String code) {
return (OrderStatusEnum) EnumAbilityUtil.getEnumByCode(OrderStatusEnum.class, code);
}
}
@AllArgsConstructor
public enum ProductEnum implements EnumAbility<String> {
BOSSKG("BOSS开工"),
HUICHUXING("惠出行"),
SICHEBANGONG("私车办公"),
YOUFU("优付"),
UNKNOWN("未知"),
;
private String description;
@Override
private String getCode(){
return this.toString();
}
@Override
public String getDescription() {
return description;
}
public static ProductEnum getBean(String code) {
return (ProductEnum) EnumAbilityUtil.getEnumByCode(ProductEnum.class, code);
}
}
@Getter
@AllArgsConstructor
public enum SeasonEnum implements EnumAbility<Integer> {
SPRING(1, "春"),
SUMMER(2, "夏"),
AUTUMN(3, "秋"),
WINTER(4, "冬");
private Integer code;
private String description;
public static SeasonEnum getBeanByCode(Integer code) {
if (null == code) return null;
return (SeasonEnum) EnumAbilityUtil.getEnumByCode(SeasonEnum.class, code);
}
}
边栏推荐
- Household appliance industry under the "retail is king": what is the industry consensus?
- 2022.6.28
- 又一百万量子比特!以色列光量子初创公司完成1500万美元融资
- Cryptography series: detailed explanation of online certificate status protocol OCSP
- Appx代码签名指南
- 注意力机制原理
- leetcode-02(链表题)
- 「小样本深度学习图像识别」最新2022综述
- Codeforces Round #264 (Div. 2) C Gargari and Bishops 【暴力】
- The solution of unable to create servlet file after idea restart
猜你喜欢
【基于 RT-Thread Studio的CPK-RA6M4 开发板环境搭建】
Intelligent static presence detection scheme, 5.8G radar sensing technology, human presence inductive radar application
input_delay
线性表的查找
RestClould ETL 社区版六月精选问答
Create applet from 0
Hazel engine learning (V)
Flink task exit process and failover mechanism
上个厕所的功夫,就把定时任务的三种调度策略说得明明白白
Do you know the five most prominent advantages of E-bidding?
随机推荐
VHDL实现任意大小矩阵乘法运算
Uniapp adaptation problem
How does C language (string) delete a specified character in a string?
又一百万量子比特!以色列光量子初创公司完成1500万美元融资
LAB1配置脚本
HMS core machine learning service creates a new "sound" state of simultaneous interpreting translation, and AI makes international exchanges smoother
Appx code signing Guide
[tools] basic concept of database and MySQL installation
图形化工具打包YOLOv5,生成可执行文件EXE
MOS transistor realizes the automatic switching circuit of main and auxiliary power supply, with "zero" voltage drop and static current of 20ua
HDU 4337 King Arthur&#39;s Knights 它输出一个哈密顿电路
Development of wireless communication technology, cv5200 long-distance WiFi module, UAV WiFi image transmission application
HDU 4337 King Arthur&#39; S Knights it outputs a Hamiltonian circuit
体会设计细节
[swift] learning notes (I) -- familiar with basic data types, coding styles, tuples, propositions
树莓派设置wifi自动连接
从 1.5 开始搭建一个微服务框架——日志追踪 traceId
Le tube MOS réalise le circuit de commutation automatique de l'alimentation principale et de l'alimentation auxiliaire, et la chute de tension "zéro", courant statique 20ua
编译常量、ClassLoader类、系统类加载器深度探析
硬件之OC、OD、推挽解释