[改善Java代码]使用构造函数协助描述枚举项
2016-04-29 16:39
274 查看
一、分析
一般来说,我们经常使用的枚举项只有一个属性,即排序号,其默认值是从0、1、2... ...。但是除了排序号外,枚举还有一个(或多个)属性:枚举描述,它的含义是通过枚举的构造函数,声明每个枚举项(也就是枚举实例)必须具有的属性和行为,这是对枚举项的描述或补充,目的是使枚举项表述的意义更加清晰准确.
二、场景
比如,可以通过枚举构造函数声明业务值,定义可选项,添加属性,看如下代码:
运行输出: 春
其枚举项是英文的,描述是英文的,这样使其描述更加准确.方便了多个协作者共同引用常量.若不考虑描述的使用(即访问getDes方法),它与如下定义的描述很相似.
比较上面两段代码,很容易看出使用枚举项是一个很好的解决方案,非常简单,清晰.
可以通过枚举构造函数声明业务值,定义可选项,添加属性等.看如下代码:
这是一个角色定义类,描述了两个角色:管理员(Admin)和普通用户(User),同时它还通过构造函数对这两个角色进行了描述.:
1.name 表示的是该角色的中文名称
2.lifeTime 表示的是该角色的生命周期,也就是多长时间角色失效
3.scope 表示的是该角色的权限范围.
这样 一个描述可以使开发者对Admin和User两个常量有一个立体多维度的认知.有名称,生命期还有权限范围.而且还可以在程序中方便的获得这些属性.
建议在枚举定义中改为每个枚举项定义描述,特别是在大规模的项目开发中.大量的常量项定义使用枚举比在接口常量或者类常量中增加注释的方式友好简洁很多.
一般来说,我们经常使用的枚举项只有一个属性,即排序号,其默认值是从0、1、2... ...。但是除了排序号外,枚举还有一个(或多个)属性:枚举描述,它的含义是通过枚举的构造函数,声明每个枚举项(也就是枚举实例)必须具有的属性和行为,这是对枚举项的描述或补充,目的是使枚举项表述的意义更加清晰准确.
二、场景
比如,可以通过枚举构造函数声明业务值,定义可选项,添加属性,看如下代码:
public class Client { public static void main(String[] args) { System.out.println(Season.Spring.getDesc()); } } enum Season { Spring("春"), Summer("夏"), Autumn("秋"), Winter("冬"); private String desc; Season(String _desc){ desc = _desc; } //获得枚举值 public String getDesc(){ return desc; } }
运行输出: 春
其枚举项是英文的,描述是英文的,这样使其描述更加准确.方便了多个协作者共同引用常量.若不考虑描述的使用(即访问getDes方法),它与如下定义的描述很相似.
interface Season{ //春 int Spring = 0; //夏 int Summer =1 ..... }
比较上面两段代码,很容易看出使用枚举项是一个很好的解决方案,非常简单,清晰.
可以通过枚举构造函数声明业务值,定义可选项,添加属性等.看如下代码:
enum Role{ Admin("管理员",new Lifetime(),new Scope()); User("普通用户",new Lifetime(),new Scope()); //中文描述 private String name; //角色生命周期 private Lifetime lifeTime; //权限范围 private Scope scope; Role(String _name,Lifetime _lt,Scope _scope){ name = _name; lifeTime = _lifeTime; scope = _scope; } /**name,lifeTime,scope的get方法较简单,不再赘述*/ }
这是一个角色定义类,描述了两个角色:管理员(Admin)和普通用户(User),同时它还通过构造函数对这两个角色进行了描述.:
1.name 表示的是该角色的中文名称
2.lifeTime 表示的是该角色的生命周期,也就是多长时间角色失效
3.scope 表示的是该角色的权限范围.
这样 一个描述可以使开发者对Admin和User两个常量有一个立体多维度的认知.有名称,生命期还有权限范围.而且还可以在程序中方便的获得这些属性.
建议在枚举定义中改为每个枚举项定义描述,特别是在大规模的项目开发中.大量的常量项定义使用枚举比在接口常量或者类常量中增加注释的方式友好简洁很多.
相关文章推荐
- 面向对象三大基本特性,五大基本原则
- Spring MVC静态资源处理
- MyEclipse 中各种 libraries 的含义
- rxJava 学习之路(二)
- Servlet & JSP - Java Web 访问资源的路径问题
- java实现批量删除用户,选中删除用户
- 使用spring mvc 4.2.x.jar ClassNotFoundException:org.springframework.web.cors.CorsConfigurationSource
- java5 CountDownLatch线程同步工具类
- Spring事务管理的5种配置方式
- javaweb项目中中文乱码
- Java Swing简单控件实例(JButton,JLabel,JMenuBar,JComboBo)
- Java中的线程池
- 自己写的代码生成器,spring+spring mvc +Hibernate
- Java回调机制解析
- 非常经典的JAVA编程题(正整数分解质因数)
- 谈win7下Eclipse环境中向安装在虚拟机中的Hadoop中上传文件为空的解决方法
- java 定时器
- java连续取掉多个不需要的字符
- Java如何让异常处理机制更完备规范
- 设计模式-适配器模式