使用枚举代替常量,简化工作!
来源:互联网 发布:java微信 api好友列表 编辑:程序博客网 时间:2024/05/22 06:35
转载请注明出处:(http://blog.csdn.net/My_TrueLove/article/details/52074493)
访问 ruicb.com,一键抵达我的博客!扫描左侧二维码,关注我的公众号!
距离上一篇博客,不知不觉已经过去三个月了,不禁感叹时光如白驹过隙。这三个月,技术还是那样(囧),但换了份比较满意的工作,摸打滚爬一个月后,终于慢慢熟悉了新公司的业务,也终于可以抽点时间写写博客了,这事需要坚持下去!
回想过去的一个月,上班啃着公司的代码,熟悉业务,以战代练,甚是煎熬,好在同事们都很Nice,才让我一切都显得那么顺利!下班时间不敢闲着,在进阶道路上继续探索:插件化、自定义View、事件分发和事件冲突解决、Android MVP…
这次的分享,其实内容很简单,但我认为自己不知道的东西,即使再简单也是值得学习的,也应该分享给和我一样不了解的人。也顺便找找写博客的感觉 :)
——————华丽的分割线————-
今天的话题是枚举,内容很基础,不妨以故事情节展开,最后引出使用枚举的好处。
需求:有一个任务
(Task),服务端定义了一个int status
来标记任务的状态,包括 未开始
、进行中
、已完成
这三个状态,分别用 0、1、2 来标记。我们拿到这个status
之后,需要根据状态的不同,显示不同的文本(需求仍在挖掘中)。
需求很明确,一般我们会这么做。
在全局的常量类中定义定义3个静态常量表示状态常量:
接下来在strings.xml
定义状态值:未开始
、进行中
、已完成
最后,在代码中拿到status
之后,我们会这么做:
这样写,所有的状态和状态值都统一了,规范的很,效果也不错,毫无违和感!
突然有一天,产品汪找到你:Hi,我们把文本前面的颜色设置成动态的吧,不同的状态颜色不一样,你根据效果图改一下吧…”。还好这个简单,分分钟的事。
在colors.xml中,加几个色值:
然后修改switch语句,这样:
So easy,很快解决了问题!
慢慢的,随着开发的深入,你发现许多地方需要这么显示,于是就封装了一个自定义ViewGroup,一切都朝着好的方向发展。但除此之外,在其他地方,也需要判断这个状态值,以需要获取该状态下的属性,万一哪天产品汪跟你说:“我要多加一个状态,未知(UN_KONW)。服务端和iOS已经同步了,你这边赶紧吧”,意味着之前涉及状态判断的都需要找到加上,岂不傻眼了?
所以,大多数人还是会选择将这一部分写到全局的静态方法中,这样加字段、加状态再也不怕了,在对应文件中加几个常量【status、颜色、状态文本】,改一下方法就搞定!由于这块不是本文重点,就不贴代码了。
至此,我们的程序一步步完善了,一些基本的套路已经无法难倒我们了,完美!
功能基本实现了,但是回过头来想想,这样做并不优雅!一方面需求变动时我们还是需要改很多地方,另一方面我们并不能很直观的看出状态值status与状态文本、色值
之间的关系,比如 0代表未开始,颜色为黄色
。当然,可以向上文一样,依靠命名规范去解决这个问题。可是,在命名规范的基础上,有没有更好的办法进一步强化他们之间的关系呢?当然有!接下来,就到了今天的主题,一起来借助枚举完成这一任务。
—————–枚举登场—————————–
刚开始,我们可以定义一个枚举类,这么写(如果你对这一写法还不了解,可以查阅其他博文):
用的时候简直不要太简单(status是从服务端获取的状态值):
然后后来产品说加一个色值,你很坦然就加上了。这么写:
用的时候毫不影响:
重点来了,该到加未知
(UN_KNOW)状态的时候了,按照上文的做法,我们要改、加的东西很多,但现在只需要加一行代码,是的,一行代码:
就是这么简单!同时,这么写的话,就不需要在 string.xml
、colors.xml
、常量类中加一堆值了,直接放在枚举类中很直观有木有?!
当然,有时候我们需要在某个地方使用常量来判断,下图是常见的做法。现在我们把状态值写到枚举里面了,还能这么直观的用吗?答案是肯定的!
OK,关于使用枚举代替常量的分享就到这儿了。全文以故事线的形式展开,说了这么多就为这一个知识点,可见其在某些场景下还是很重要的。
最后,声明一点,我所说的使用枚举替换常量,是针对类似于“常量之间存在关联”的情况,如状态值status与状态文本、色值
,此时使用枚举能大大简化我们的工作,并不是说以后所有常量都写成枚举,毕竟官方是不推荐使用枚举的:
Enums often require more than twice as much memory as static constants. You should strictly avoid using enums on Android.
但也只是尽量避免使用!所以在实际开发中,还需要根据实际使用场景去斟酌,杜绝滥用。像本文描述的场景,建议使用,战斗力翻倍!
- 使用枚举代替常量,简化工作!
- 项目代码优化:使用Java枚举常量代替类常量
- 使用枚举常量代替接口常量或类常量(一个枚举实例)
- 使用常量数组简化算法
- 使用枚举定义常量
- 使用脚本简化工作
- 使用elif分支代替映射简化设计
- 【工作笔记】枚举作为常量类
- 【代码优化】使用enum代替int常量
- 使用枚举类定义常量
- Java枚举常量的使用
- java枚举常量的使用
- C++ - 使用 编译器常量 代替 预处理常量 详解
- Android @IntDef的使用 - 代替枚举
- Java提高:推荐使用枚举定义常量
- java推荐使用枚举定义常量
- 使用枚举引用带有特殊符号的常量
- 使用批处理简化自己的工作
- java设计模式_外观模式
- get all Palindromes of a string
- continue,break控制流程
- 后缀数组 模板
- 【Web容器】Tomcat源码分析(3)-生命周期管理
- 使用枚举代替常量,简化工作!
- Docker 构建 Java Web 开发环境——使用Dockerfile(二)
- 数据结构笔记--总结各种排序算法及其应用
- 【Web容器】Tomcat源码分析(4)-启动与停止服务
- HDU 1536 SG函数模板
- 一个礼拜的学习总结
- Linux Ubuntu服务器用户权限及安全登陆限制
- Java基础——类成员
- Effective C++_Item5笔记