博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Enum
阅读量:6670 次
发布时间:2019-06-25

本文共 3994 字,大约阅读时间需要 13 分钟。

 Enum使用经验:

1.Enum类型本身实现了序列化,可以随着对象放到memcache;

2.通常每个Enum需要有一个int类型的属性。DB中保存的字段可以是一个enum的值,也可以多个enum的与或的结果。比字符串的扩展性更好。

2.1 type的子类型的设计

注意,通常权限都是1, 2, 4, 8.....      二进制值11仍然可以表示为10的仅有的子类型。101,110,111可以表示100的三种子类型。

如果type的值存在子类型值,那么sql中就不适合通过type = someType 来获取包含子类型的所有记录

假如库中,type=1表示想去,type=2表示去过, type=1 |2表示从想去到运过的状态(但属于去过的一种子类型),如果想查询所有的去过的记录,type & 2 >0就是正确的办法。

2.2 在sql中使用 type & allType=someType与type=someType效果类似。

 

3.使用Map代替switch case 返回对应的枚举。一种好的方式是在enum中的static块中构造map。

public static enum PostCategory {        NO(0, "_post_category_no", ""), TRIP(1, "_post_category_lvyouluxian", "Lvyouluxian"), FOOD(                2, "_post_category_meishi", "Meishi"), SHOPPING(3, "_post_category_gouwu",                "Gouwu"), ENTAINMENT(4, "_post_category_yule", "Yule"), OTHER(5,                "_post_category_qita", "Qita");        private static final Map
mLookup = new HashMap
(); static { for (PostCategory category : EnumSet.allOf(PostCategory.class)) { mLookup.put(category.getFlag(), category); } } public static PostCategory get(int nCategoryId) { return mLookup.get(nCategoryId); } private int m_nFlag; private String m_sCaption; private String m_sPinyin; private PostCategory(int nFlag, String sCaption, String sPinyin) { m_nFlag = nFlag; m_sCaption = sCaption; m_sPinyin = sPinyin; } public int getFlag() { return m_nFlag; } public String getCaption() { return m_sCaption; } public String getPinyin() { return m_sPinyin; } }

4.对于一些存在关联关系的enum,static块中也可以使用map去映射关系。

public enum SubCategory {        YAN_TU_JING_DIAN(PostCategory.TRIP, "subcategory6_tag", "subcategory_yantujingdian", 6), XIAN_LU_TE_SE(                PostCategory.TRIP, "subcategory7_tag", "subcategory_xianlutese", 7), TUI_JIAN_CAN_GUAN(                PostCategory.FOOD, "subcategory8_tag", "subcategory_tuijiancanguan", 8), DANG_DI_MEI_SHI(                PostCategory.FOOD, "subcategory9_tag", "subcategory_dangdimeishi", 9), GOU_WU_CHANG_SU(                PostCategory.SHOPPING, "subcategory10_tag", "subcategory_gouwuchangsu", 10), SU_GOU_SHANG_PIN(                PostCategory.SHOPPING, "subcategory11_tag", "subcategory_sugoushangpin", 11), YU_LE_CHANG_SUO(                PostCategory.ENTAINMENT, "subcategory12_tag", "subcategory_yulechangsuo", 12);        private static Map
> CATEGORY_MAP = new HashMap
>(); private static List
NAME_SET = new ArrayList
(); static { for (SubCategory category : EnumSet.allOf(SubCategory.class)) { { if (CATEGORY_MAP.get(category.getParentCategory()) == null) { List
scl = new ArrayList
(); scl.add(category); CATEGORY_MAP.put(category.getParentCategory(), scl); } else { CATEGORY_MAP.get(category.getParentCategory()).add(category); } NAME_SET.add(category.getName()); } } } private PostCategory parentCategory; private String formField; private String key; private int id; private SubCategory(PostCategory parent, String field, String name, int id) { this.parentCategory = parent; this.formField = field; this.key = name; this.id = id; } public String getFieldName() { return this.formField; } public String getName() { return UserInterfaceUtil.getInstance().localize(this.key); } public int getId() { return this.id; } public PostCategory getParentCategory() { return this.parentCategory; } public static List
getSubCategoryBy(PostCategory category) { return CATEGORY_MAP.get(category); } public static List
getNameSet() { return NAME_SET; } }
 
 
5.注意Enum类的equal方法是不希望用户去复盖,使用了final,默认是比较引用。

转载地址:http://rzlxo.baihongyu.com/

你可能感兴趣的文章
面试2
查看>>
国庆第三天如何避免无聊
查看>>
Java多线程之细说线程池
查看>>
【274】Python 相关问题
查看>>
Apple watch ,小米微信通知
查看>>
Django 时间与时区设置问题
查看>>
【WPF】TextBox样式重写注意事项
查看>>
ORA-01652: 无法通过 128 (在表空间 TEMP1 中) 扩展 temp 段
查看>>
PO审批问题-行接收后更改价格变为预审批
查看>>
jquery 实现checkbox全选功能,全不选功能.
查看>>
What is a Notch Filter?
查看>>
Matlab中二维统计分析图和三维立体图
查看>>
MapReduce新版客户端API源码分析
查看>>
使用ffmpeg实现合并多个音频为一个音频的方法
查看>>
Eclipse Plugin Installation and Windows User Access Control
查看>>
Rotating Sentences
查看>>
Zookeeper从入门到精通(开发详解,案例实战,Web界面监控)
查看>>
jQuery操作Select
查看>>
DotNetCore跨平台~Startup类的介绍
查看>>
企业架构,业务架构,数据架构
查看>>