枚举作为常量用法的案例

文章转载自:https://blog.csdn.net/my_truelove/article/details/52074493

Java 枚举(enum) 常见的有7种用法 , 具体有哪七种用法可以参考Java 枚举(enum) 详解7种常见的用法

今天我们讲解枚举作为常量用法的经典案例.

需求: 有很多订单展示 , 服务端会告诉客户端每个订单的状态 , 通过status来定义每个订单的状态 , 其包括 0未开始 1:进行中 2:已完成 , 我们会根据不同的状态显示不同的文本内容 . 目前的需求就是这样的 .

需求很明确,一般我们会这么做。

在全局的常量类中定义定义3个静态常量表示状态常量:
在这里插入图片描述
接下来在strings.xml定义状态值:未开始、进行中、已完成
在这里插入图片描述
最后,在代码中拿到status之后,我们会这么做:
在这里插入图片描述
需求很简单 , 这样就OK了.
在这里插入图片描述

突然有一天,产品汪找到你:Hi,我们把文本前面的颜色设置成动态的吧,不同的状态颜色不一样,你根据效果图改一下吧…”。还好这个简单,分分钟的事。

在colors.xml中,加几个色值:
在这里插入图片描述
然后修改switch语句,这样:
在这里插入图片描述

So easy,很快解决了问题!

慢慢的,随着开发的深入,你发现许多地方需要这么显示,于是就封装了一个自定义ViewGroup,一切都朝着好的方向发展。但除此之外,在其他地方,也需要判断这个状态值,以需要获取该状态下的属性,万一哪天产品汪跟你说:“我要多加一个状态,未知(UN_KONW)。服务端和iOS已经同步了,你这边赶紧吧”,意味着之前涉及状态判断的都需要找到加上,岂不傻眼了?

所以,大多数人还是会选择将这一部分写到全局的静态方法中,这样加字段、加状态再也不怕了,在对应文件中加几个常量【status、颜色、状态文本】,改一下方法就搞定!由于这块不是本文重点,就不贴代码了。

至此,我们的程序一步步完善了,一些基本的套路已经无法难倒我们了,完美!

功能基本实现了,但是回过头来想想,这样做并不优雅!一方面需求变动时我们还是需要改很多地方,另一方面我们并不能很直观的看出状态值status与状态文本、色值之间的关系,比如 0代表未开始,颜色为黄色。当然,可以向上文一样,依靠命名规范去解决这个问题。可是,在命名规范的基础上,有没有更好的办法进一步强化他们之间的关系呢?当然有!接下来,就到了今天的主题,一起来借助枚举完成这一任务。

-----------------------------------------------------枚举登场-------------------------------------------------------------

刚开始,我们可以定义一个枚举类,这么写(如果你对这一写法还不了解,可以查阅其他博文)

public enum CardStatus {

    UN_START(0, "未开始"),
    PROCESSING(1, "进行中"),
    COMPLETED(2, "已完成");

    public int mStatus;
    public String mStatusText;

    CardStatus(int status, String statusText) {
        mStatus = status;
        mStatusText = statusText;
    }

    public static CardStatus getStatusValue(int status) {
        for (CardStatus statusConstants : values()) {
            if (status == statusConstants.mStatus) {
                return statusConstants;
            }
        }
        return UN_START;
    }

}

用的时候简直不要太简单(status是从服务端获取的状态值):

  CardStatus statusValue = CardStatus.getStatusValue(status);
  mStatusTv.setText(statusValue.mStatusText);

然后后来产品说加一个状态图标,你很坦然就加上了。这么写:
在这里插入图片描述
用的时候毫不影响:

   CardStatus statusValue = CardStatus.getStatusValue(status);
   mStatusIv.setBackgroundResource(statusValue.mStatusPic);
   mStatusTv.setText(statusValue.mStatusText);

效果图:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
重点来了,该到加未知(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.

但也只是尽量避免使用!所以在实际开发中,还需要根据实际使用场景去斟酌,杜绝滥用。像本文描述的场景,建议使用,战斗力翻倍!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Part1第一部分: 相信大家找得到该书的源代码部分 也就是这部分内容 因此我便无偿奉送 让大家下载试试。 若感觉可以方可继续下载电子书部分。 1.本书1~21章所附代码的运行环境 操作系统:Windows Server 2003或Windows XP Professional 开发环境:Microsoft Visual Studio 2005 数据库:SQL Server 2005 Web服务器:IIS 5.1及以上版本 2.本书所附光盘范例 第1章(\Chapter 01) 示例描述:本章演示ASP.NET 2.0网站的预编译以及学习ASP.NET 2.0的前置知识。 WebSite文件夹 创建的ASP.NET 2.0 Web站点。 www文件夹 第一个用C#开发的Web应用程序。 bianyi.bat 编译网站的批处理文件。 form.html 表单范例。 css.html CSS范例。 第3章(\Chapter 03) 示例描述:本章介绍C# 2.0程序设计基础。 3-01.cs 第一个C#程序。 3-02.cs 不导入命名空间来改写程序3-01.cs。 3-03.cs ReadLine()方法读数据。 3-04.cs 常量的使用。 3-05.cs 整型类型的使用。 3-06.cs 结构类型的使用。 3-07.cs 枚举类型的使用。 3-08.cs 用一个输入参数通过值传递一个变量给一个方法。 3-09.cs 一维数组的使用。 3-10.cs 使用代理类型。 3-11.cs 使用接口。 3-12.cs 装箱操作。 3-13.cs 字符串操作。 3-14.cs if语句的使用。 3-15.cs switch语句的使用。 3-16.cs while语句的使用。 3-17.cs do-while语句的使用。 3-18.cs for语句的使用。 3-19.cs 异常捕获:try-catch语句的使用。 3-20.cs 异常捕获:try-finally语句的使用。 3-21.cs 异常捕获:try-catch-finally语句的使用。 3-22.cs get和set对属性的值进行读写操作。 3-23.cs 方法的使用。 3-24.cs 继承演示。 3-25.cs 多态性演示。 第4 章(\Chapter 04) 示例描述:本章学习ASP.NET 2.0页面基本对象。 4-01.aspx aspx页面中添加一个Lable标签。 4-02.aspx 读出Application的属性值。 4-03.aspx 读出SessionID的值。 4-04.aspx 创建Session对象。 4-05.aspx 读取传递的Session值并显示。 4-06.aspx 使用Response对象的Write()方法。 4-07.aspx
上篇 ASP.NET应用与开发基础 第1章 ASP.NET概论 1.1 ASP.NET简介 1.1.1 从.NET谈起 1.1.2 动态网站设计技术 1.1.3 ASP.NET的介绍 1.1.4 ASP.NET和ASP的对比 1.2 运行环境配置 1.2.1 ASP.NET运行环境介绍 1.2.2 lis的安装和配置 1.2.3 安装Microsoft.NET Framework SDK 1.2.4 Visual Studio.NET的简介 1.3 从HelloWorld开始 1.3.1 用HTML编写的Hello World程序 1.3.2 用C#编写的Hello World程序 1.4 小结 1.5 习题 第2章 ASP.NET语言基础 2.1 C#言简介 2.2 一个简单的程序 .2.3 C#中的数据类型 2.3.1 整型 2.3.2 浮点型 2.3.3 布尔型 2.3.4 字符型 2.3.5 预定义引用类型 2.4 C#中的变量和常量 2.4.1 变量声明和赋值 2.4.2 定义常量 2.4.3 枚举类型 2.5 C#中的操作符与表达式 2.5.1 赋值运算符 2.5.2 算术运算符 2.5.3 比较运算符 2.5.4 布尔逻辑运算符 2.5.5 位运算符 2.6 C#中的控制语句 2.6.1 选择语句 2.6.2 循环语句 2.7 C#中的类机制简介 2.8 小结 2.9 习题 第3章 Web Form 3.1 Web Form概述 3.1.1 什么是Web Form 3.1.2 Web Form的组成 3.1.3 第一个Web Form程序 3.1.4 让Web Form支持中文 3.2 Web Form语法知识 3.2.1 aspx文件的构成 3.2.2 服务器控件(Server Controls) 3.2.3 Web Form的Code-Behind代码组织方式 3.3 Web Form页面处理 3.3.1 页面处理内部过程 3.3.2 页面的一次往返处理 3.3.3 页面重建 3.4 声明和使用服务器控件 3.4.1 声明服务器控件 3.4.2 响应服务器控件 3.5 小结 3.6 习题 第4章 服务器控件 4.1 常用的HTML控件 4.1.1 表单控件 4.1.2 表格控件 4.1.3 其他控件 4.2 Web控件 4.2.1 Label控件 4.2.2 Button控件 4.2.3 CheckBox和CheckBoxList控件 4.2.4 RadioButton和RadioButtonList控件 4.2.5 Image控件和ImageButton控件 4.2.6 HyperLink和LinkButton控件 4.2.7 DropDownList和ListBox控件 4.2.8 Panel控件 4.2.9 TextBox控件 4.2.10 Table控件、TableRow控件及TableCel!控件 4.2.11 高级控件 4.3 验证控件 4.3.1 验证控件概述 4.3.2 验证控件的类型 4.3.3 验证技术的综合应用 4.4 用户控件 4.4.1 用户控件概述 4.4.2 用户控件中定义属性 4.4.3 用户控件中的事件处理 4.4.4 从Web Form页面到用户控件 4.5 小结 4.6 习题 中篇 ASP.NET应用与开发的核心内容 第5章 AD0.NET数据库连接 5.1 ADO.NET基本概念 5.1.1 ADO.NET对象模型 5.1.2 ADO.NET对比ADO 5.2 ADO.NET数据库连接概述 5.3 使用Connection对象 5.4 使用Command和DataReader对象 5.4.1 Command对象 5.4.2 DataReader对象 5.4.3 使用Command对象实现存储过程访问 5.5 使用DataSet对象 5.5.1 DataTableCollection对象 5.5.2 DataRelationCollection对象 5.5.3 ExtendedProperties对象 5.5.4 使用DataSet对象获取数据 5.5.5 使用DataSet 5.5.6 使用DataTable 5.6 使用DataAdapter对象 5.7 小结 5.8 习题 第6章 ADO.NET数据管理与数据控件 6.1 SQL操作 6.1.1 数据查询 6.1.2 数据更新 6.2 数据绑定技术 6.3 DmaGdd控件 6.3.1 在DataGfid中显示数据 6.3.2 为DataGrid添加多功能列 6.4 Repeater控件 6.5 DataList控件 6.6 小结 6.7 习题 第7章 跟踪调试ASP,NET程序 7.1 错误的种类 7.2 跟踪ASP.NET程序 7.2.1 页面级的跟踪 7.2.2 应用程序级的跟踪 7.3 调试ASP.NET程序 7.3.1 调试ASP.NET程序 7.3.2 设置断点 7.4 小结 7.5 习题 第8章 ASP.NET应用程序 8.1 什么是应用程序 8.2 ASP.NET配置文件概述 8.2.1 什么是配置文件 8.2.2 ASP.NET程序配置文件格式 8.2.3 配置文件的内容格式 8.3 ASP.NET应用程序中的用户状态管理 8.3.1 Global.asax文件概述 8.3.2 Application对象事件 8.3.3 Session对象事件 8.3.4 其他几种客户端的用户状态管理方法 8.3.5 本小节提示 8.4 ASP.NETHTFP运行情况 8.4.1 HTFP运行情况介绍 8.4.2 HTFP处理程序 8.5 小结 8.6 习题 第9章 ASP.NET与XML 9.1 XML简介 9.1.1 什么是标记语言 9.1.2 HTML的弊病 9.1.3 什么是XML 9.2 XML基本语法 9.2.1 语法的基本要求和概念 9.2.2 文件 9.2.3 XML文件的逻辑结构 9.2.4 XML文件的物理结构 9.3 操作XML 9.3.1 XML控件 9.3.2 XmlTextReader 9.3.3 XmlTextWriter 9.3.4 XML DOM 9.3.5 XmlDataDOcument 9.3.6 DataSet 9.4 小结 9.5 习题 第10章 web service 10.1 Web Service简介 10.2 一个简单的Web Service程序 10.3 Web Service支持的数据类型 10.4 建立Web Service 10.5 使用Web Service 10.6 使用Session和Application对象 10.7 小结 10.8 习题 下篇 ASP.NET在实际中的应用与YF发 第11章 留言板的实现 11.1 系统功能及结构描述 11.2 数据库的实现 11.3 各功能模块的具体实现 11.4 小结 11.5 习题 第12章 网上书店开发实例 12.1 网上书店的系统设计 12.2 网上书店的数据库设计 12.3 网上书店的实现 12.3.1 实现用户登录 12.3.2 实现用户注册 12.3.3 实现分类浏览 12.3.4 实现按名搜索 12.3.5 查看图书介绍 12.3.6 购物车及购买 12.3.7 客户订单管理 12.3.8 新书入库 12.3.9 封面上载 12.3.10 库存管理 12.4 小结
上篇ASP.NET应用与开发基础 第1章ASP.NET概论 1.1ASP.NET简介 1.1.1从.NET谈起 1.1.2动态网站设计技术 1.1.3ASP.NET的介绍 1.1.4ASP.NET和ASP的对比 1.2运行环境配置 1.2.1ASP.NET运行环境介绍 1.2.21lS的安装和配置 1.2.3安装Microsoft.NETFrameworkSDK 1.2.4VisualStudio.NET的简介 1.3从HelloWorld开始 1.3.1用HTML编写的HelloWorld程序 1.3.2用C#编写的HelloWorld程序 1.4小结 1.5习题 第2章ASP.NET语言基础 2.1C#语言简介 2.2一个简单的程序 2.3C#中的数据类型 2.3.1整型 2.3.2浮点型 2.3.3布尔型 2.3.4字符型 2.3.5预定义引用类型 2.4C#中的变量和常量 2.4.1变量声明和赋值 2.4.2定义常量 2.4.3枚举类型 2.5C#中的操作符与表达式 2.5.1赋值运算符 2.5.2算术运算符 2.5.3比较运算符 2.5.4布尔逻辑运算符 2.5.5位运算符 2.6C#中的控制语句 2.6.1选择语句 2.6.2循环语句 2.7C#中的类机制简介 2.8小结 2.9习题 第3章WebForm 3.1WebForm概述 3.1.1什么是WebForm 3.1.2WebForm的组成 3.1.3第一个WebForm程序 3.1.4让WebForm支持中文 3.2WebForm语法知识 3.2.1aspx文件的构成 3.2.2服务器控件(ServerControls) 3.2.3WebForm的Code-Behind代码组织方式 3.3WebForm页面处理 3.3.1页面处理内部过程 3.3.2页面的一次往返处理 3.3.3页面重建 3.4声明和使用服务器控件 3.4.1声明服务器控件 3.4.2响应服务器控件 3.5小结 3.6习题 第4章服务器控件 4.1常用的HTML控件 4.1.1表单控件 4.1.2表格控件 4.1.3其他控件 4.2Web控件 4.2.1Label控件 4.2.2Button控件 4.2.3CheckBox和CheckBoxList控件 4.2.4RadioButton和RadioButtonList控件 4.2.51mage控件和ImageButton控件 4.2.6HyperLink和LinkButton控件 4.2.7DropDownList和ListBox控件 4.2.8Panel控件 4.2.9TextBox控件 4.2.10Table控件、TableRow控件及TableCell控件 4.2.11高级控件 4.3验证控件 4.3.1验证控件概述 4.3.2验证控件的类型 4.3.3验证技术的综合应用 4.4用户控件 4.4.1用户控件概述 4.4.2用户控件中定义属性 4.4.3用户控件中的事件处理 4.4.4从WebForm页面到用户控件 4.5小结 4.6习题 中篇ASP.NET应用与开发的核心内容 第5章AD0.NET数据库连接 5.1ADO.NET基本概念 5.1.1ADO.NET对象模型 5.1.2ADO.NET对比ADO 5.2ADO.NET数据库连接概述 5.3使用Connection对象 5.4使用Command和DataReader对象 5.4.1Command对象 5.4.2DataReader对象 5.4.3使用Command对象实现存储过程访问 5.5使用DataSet对象 5.5.1DataTableCollection对象 5.5.2DataRelationCollection对象 5.5.3ExtendedProperties对象 5.5.4使用DataSet对象获取数据 5.5.5使用DataSet 5.5.6使用DataTable 5.6使用DataAdapter对象 5.7小结 5.8习题 第6章AD0.NET数据管理与数据控件 6.1SQL操作 6.1.1数据查询 6.1.2数据更新 6.2数据绑定技术 6.3DataGrid控件 6.3.1在DataGrid中显示数据 6.3.2为DataGrid添加多功能列 6.4Repeater控件 6.5DataList控件 6.6小结 6.7习题 第7章跟踪调试ASP.NET程序 7.1错误的种类 7.2跟踪ASP.NET程序 7.2.1页面级的跟踪 7.2.2应用程序级的跟踪 7.3调试ASP.NET程序 7.3.1调试ASP.NET程序 7.3.2设置断点 7.4小结 7.5习题 第8章ASP.NET应用程序 8.1什么是应用程序 8.2ASP.NET配置文件概述 8.2.1什么是配置文件 8.2.2ASP.NET程序配置文件格式 8.2.3配置文件的内容格式 8.3ASP.NET应用程序中的用户状态管理 8.3.1Global.asax文件概述 8.3.2Application对象事件 8.3.3Session对象事件 8.3.4其他几种客户端的用户状态管理方法 8.3.5本小节提示 8.4ASP.NETHTFP运行情况 8.4.1HTYP运行‘晴况介绍 8.4.2HTFP处理程序 8.5小结 8.6习题 第9章ASP.NET与XML 9.1XML简介 9.1.1什么是标记语言 9.1.2HTML的弊病 9.1.3什么是XML 9.2XML基本语法 9.2.1语法的基本要求和概念 9.2.2文件 9.2.3XML文件的逻辑结构 9.2.4XML文件的物理结构 9.3操作XML 9.3.1XML控件 9.3.2XmlTextReader. 9.3.3XmlTextWriter 9.3.4XMLDOM 9.3.5XmlDataDocument 9.3.6DataSet 9.4小结 9.5习题 第10章WebSeMce 10.1WebService简介 10.2一个简单的WebService程序 10.3WebService支持的数据类型 10.4建立WebService 10.5使用WebService 10.6使用Session和Application对象 10.7小结 10.8习题 下篇ASP.NET在实际中的应用与开发 第11章留言板的实现 11.1系统功能及结构描述 11.2数据库的实现 11.3各功能模块的具体实现 11.4小结 11.5习题 第12章网上书店开发实例 12.1网上书店的系统设计 12.2网上书店的数据库设计 12.3网上书店的实现 12.3.1实现用户登录 12.3.2实现用户注册 12.3.3实现分类浏览 12.3.4实现按名搜索 12.3.5查看图书介绍 12.3.6购物车及购买 12.3.7客户订单管理 12.3.8新书入库 12.3.9封面上载 12.3.10库存管理 12.4小结

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值