问题
如果实际业务中需要字典项,通常有以下几种做法
- 数据库存对应的k,v
- 数据库利用视图透视case when拿取结果
- 代码中使用EnumMap
- 代码中用枚举
其实就是分为了数据库和代码维护的方式,运行效率来说肯定是直接写到代码中更快,但维护起来就是数据库的优势了,所以说在数据不经常变动的情况下一般是存到代码中,反之存入数据库中。
使用枚举和常量类的区别
以下是代码对比
1 2 3 4
| public class ObjectConstant { public static final String FINISH = "FINISH"; }
|
1 2 3 4
| public enum ObjectEnum { FINISH; }
|
- 如果定义重复的值“FINISH”常量类并不会提示,可能会造成重复问题,枚举类编辑器会给出提示
- enum相当于一个类,但不可被继承,表示对应的实例是有限的
- 总结来说eunm做了很多限制更加规范
枚举的使用场景
- 作为常量使用,比如星期一到星期日,通常配合switch使用
- 通过增加变量和构造函数来达到灵活取值
- 当字典项,数字或英文变量与所表示的值对应起来
使用枚举作为字典项
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| public enum ObjectTypeEnum {
GTA_HISTORY_ACTIVITY("GTA_HISTORY_ACTIVITY", "GTA历史活动"), GTA_ACTIVITY_TRACK("GTA_ACTIVITY_TRACK", "GTA活动追踪"), OVERALL_DATA_ANALYSIS("OVERALL_DATA_ANALYSIS", "月报"), MARKETING_ACTIVITIES_ANALYSE("MARKETING_ACTIVITIES_ANALYSE", "营销活动复盘"), DAILY("DAILY", "日报"), BEHAVIOR_TRACK("BEHAVIOR_TRACK", "行为追踪"), JOINT_PURCHASE("JOINT_PURCHASE", "连带购买"), CONTACT_ANALYSIS("CONTACT_ANALYSIS", "触点分析"), REPURCHASE("REPURCHASE", "复购分析");
private final String typeKey; private final String typeValue;
ObjectTypeEnum(String typeKey, String typeValue) { this.typeKey = typeKey; this.typeValue = typeValue; }
public String getTypeKey() { return typeKey; }
public String getTypeValue() { return typeValue; }
public static String getValue(String typeKey){ for (ObjectTypeEnum type : values()){ if (Objects.equals(type.getTypeKey(), typeKey)){ return type.getTypeValue(); } } return null; }
}
|