当前位置:网站首页>Enumeration general interface & enumeration usage specification
Enumeration general interface & enumeration usage specification
2022-07-07 03:25:00 【InfoQ】
- The field value in the data table is the field of finite sequence , Corresponding to the specific enumeration in the program . Try to use varchar replace int( or tinyint). Beyond all doubt , Letter combinations are always better than 0、1、2、3 Such numbers are easy to recognize .
- If the data table field has corresponding enumeration , be , The enumeration class name should be marked on the field annotation , Facilitate program traceability .
- Enumeration generally has two parts , One is to enumerate item values , One is enumeration description . that , How are these two attributes named ? code and desc? still value and desc? still key and value? This article focuses on this problem .
@Getter
@AllArgsConstructor
public enum LevelEnum {
FIRST("FIRST", " Class A "),
SECOND("SECOND", " second level "),
THIRD("THIRD", " Level three ");
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", " initial "),
ACCOUNTING("ACCOUNTING", " In bookkeeping "),
SUCCESS("SUCCESS", " Payment succeeded "),
FAILED("FAILED", " Payment 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 starts "),
HUICHUXING(" Benefit travel "),
SICHEBANGONG(" Private car office "),
YOUFU(" Youfu "),
UNKNOWN(" 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, " In the spring "),
SUMMER(2, " In the summer "),
AUTUMN(3, " autumn "),
WINTER(4, " In the winter ");
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;
}
}
/**
* If the enumeration name is different from the actual value , Be sure to rewrite getKey Method
* Enumeration definition specification : Remember to capitalize enumeration names , The description should be as clear as possible , Don't misspell , Please check carefully
* for example :
* MONDAY(" Monday "),
* TUESDAY(" Tuesday ")
*
* @author shaozhengmao
* @create 2021-06-21 10:18 In the morning
*/
public interface EnumAbility<T> {
/**
* Return the actual value of enumeration
* @return
*/
T getCode();
/**
* Return enumeration description
*
* @return Enumeration description
*/
String getDescription();
/**
* Compare whether the current enumeration object is consistent with the passed in enumeration value (String Types ignore case )
* Whether the current enumeration item matches the value passed in from the far end ( such as : Field value of database 、rpc The parameter value passed in )
*
* @param enumCode enumeration code
* @return match
*/
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);
}
}
/**
* Compare whether the two enumeration items are identical (==)
*
* @param anotherEnum enumeration
* @return Are they the same?
*/
default boolean equals(EnumAbility<T> anotherEnum) {
return this == anotherEnum;
}
}

@Getter
@AllArgsConstructor
public enum LevelEnum implements EnumAbility<String> {
FIRST("FIRST", " Class A "),
SECOND("SECOND", " second level "),
THIRD("THIRD", " Level three ");
private String code;
private String value;
@Override
public String getDescription() {
return value;
}
/**
* 2021-12-18 23:00 zhanggz: There is ambiguity in this method , Please use {@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", " initial "),
ACCOUNTING("ACCOUNTING", " In bookkeeping "),
SUCCESS("SUCCESS", " Payment succeeded "),
FAILED("FAILED", " Payment failed ");
private String key;
private String description;
@Override
public String getCode() {
return key;
}
/**
* 2021-12-18 23:00 zhanggz: There is ambiguity in this method , Please use {@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 starts "),
HUICHUXING(" Benefit travel "),
SICHEBANGONG(" Private car office "),
YOUFU(" Youfu "),
UNKNOWN(" 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, " In the spring "),
SUMMER(2, " In the summer "),
AUTUMN(3, " autumn "),
WINTER(4, " In the winter ");
private Integer code;
private String description;
public static SeasonEnum getBeanByCode(Integer code) {
if (null == code) return null;
return (SeasonEnum) EnumAbilityUtil.getEnumByCode(SeasonEnum.class, code);
}
}
边栏推荐
- Mathematical induction and recursion
- What about SSL certificate errors? Solutions to common SSL certificate errors in browsers
- [swift] learning notes (I) -- familiar with basic data types, coding styles, tuples, propositions
- Numpy中排序操作partition,argpartition,sort,argsort
- The first symposium on "quantum computing + application of financial technology" was successfully held in Beijing
- 1200.Minimum Absolute Difference
- 源代码保密的意义和措施
- Intelligent static presence detection scheme, 5.8G radar sensing technology, human presence inductive radar application
- 变量、流程控制与游标(MySQL)
- Jerry's broadcast has built-in flash prompt tone to control playback pause [chapter]
猜你喜欢
Appx代码签名指南
如何自定义Latex停止运行的快捷键
Make (convert) ICO Icon
leetcode
2022.6.28
Jerry's broadcast has built-in flash prompt tone to control playback pause [chapter]
【基于 RT-Thread Studio的CPK-RA6M4 开发板环境搭建】
How to replace the backbone of the model
20.(arcgis api for js篇)arcgis api for js面采集(SketchViewModel)
ubuntu20安装redisjson记录
随机推荐
leetcode
Laravel php artisan 自动生成Model+Migrate+Controller 命令大全
杰理之发射端在接收端关机之后假死机【篇】
[cpk-ra6m4 development board environment construction based on RT thread studio]
opencv环境的搭建,并打开一个本地PC摄像头。
New benchmark! Intelligent social governance
从0开始创建小程序
CVPR 2022 最佳论文候选 | PIP: 6个惯性传感器实现全身动捕和受力估计
Jerry's RTC clock development [chapter]
Hazel engine learning (V)
亚像素级角点检测Opencv-cornerSubPix
Development of wireless communication technology, cv5200 long-distance WiFi module, UAV WiFi image transmission application
Jericho turns on the display icon of the classic Bluetooth hid mobile phone to set the keyboard [chapter]
【无标题】
【C语言】 题集 of Ⅸ
变量、流程控制与游标(MySQL)
Open3D 网格滤波
The version control of 2021 version is missing. Handling method
Flutter3.0, the applet is not only run across mobile applications
C language string sorting