java枚举类型的优势在哪里?--一个实例
最近在做一个项目,其中涉及到一组操作,命名为: 1. “add”; 2. "logicDel" 3. "physicDel" 4. "update" 按照大家耳熟能详的方式将这四种操作作为 final 的属性进行声明。
public final String ADD = "add"
...
于是就产生了这样的代码: if (ADD.equals(commandStr)){...}
else if (UPDATE.equals(commandStr){...}
...
后来做review的时候,越看越不爽,于是恶向胆边生,必须做掉这个有味道的代码!可是怎么做呢,忽然记起java1.5已经加入了枚举(enmu),为什么不试试呢。
enmu Command{
ADD,
LOGICDEL,
PHYSICDEL,
UPDATE
}
这就是一个最简单的枚举了。可是它的好处是什么呢? 最直接的好处是可以进行类型检测了,比如说一个接受接受该命令的方法,在之前的方式中声明只能是这样:
public void test(String command){} 这样是有风险的,参数是String那么就是说只要是String类型的参数那么在编译时就不会报错,没法保证该参数一定是在{“add”, "logicDel", "physicDel", "update"}这个集合中。比如说别人提供了“modify”这个参数,编译也是能通过的,这就不好了。但是如果用枚举的话方法的声明就可以使这样: public void test(Command){} 这就限制了操作一定是那四种。就在编译时进行了类型的检测。
OK,开头还是不错的,但是我立刻出现了问题,可以看看标红的代码,很明显我试图判断一个操作类型,但是这个操作类型是用String表示的(确实如此,没法改变,因为这个操作来自于数据库表中的记录),怎么办呢,我首先应该将这个String变成enmu才行啊,怎么弄呢,难不成要写成这样:
if("add".equals(cmmandStr)){return Command.ADD)
else if...
我靠,这么丑陋我重构干嘛啊!想了想,java肯定提供了解决的办法,查阅不表,果然有办法:
public enum Command{
ADD("add"),
LOGICDEL("logicDel"),
PHYSICDEL("physicDel"),
UPDATE("update");
private String commandStr;
Command(String commandStr){
this.commandStr = commandStr;
}
private static final Map<String, Command> stringToCommand = new HashMap<String, Command>();
static{
for(Command item : values()){
stringToCommand.put(item.toString(), item);
}
}
public static Command fromString(String commandStr){
return stringToCommand.get(commandStr);
}
@Override
public String toString(){
return this.commandStr;
}
}
这样的话,标红的代码就变成这样了:
Command test = Command.fromStr(commandStr);
switch(test)
case ADD ...
break;
case LOGICDEL ...
break;
...
哈,是不是好多了啊!
后经继续了解,java枚举除了上面提到的特定于常量的值外(标红)还可以特定于常量编写方法,用处就更大了。
怎么说呢,其实不用枚举用之前那种final定义的方法也没啥不行,但是借用一句忘了从哪看到的话: 有了她就更优雅了。
java枚举类型的优势在哪里?--一个实例的更多相关文章
- java 枚举类型分析
最近做android开发,需要用到枚举值,这样可以连续赋值,我按之前c++那样书写,如下所示: public enum ColorSelect { RED_BAGE = 0, GREEN_BAGE, ...
- 【转】java枚举类型enum的使用
原文网址:http://blog.csdn.net/wgw335363240/article/details/6359614 java 枚举类型enum 的使用 最近跟同事讨论问题的时候,突然同事提到 ...
- 【转】掌握java枚举类型(enum type)
原文网址:http://iaiai.iteye.com/blog/1843553 1 背景 在java语言中还没有引入枚举类型之前,表示枚举类型的常用模式是声明一组具有int常量.之前我们通常利用 ...
- 转载 java枚举类型enum的使用 (原文地址:http://blog.csdn.net/wgw335363240/article/details/6359614)
java枚举类型enum的使用 最近跟同事讨论问题的时候,突然同事提到我们为什么java中定义的常量值不采用enmu枚举类型,而采用public final static 类型来定义呢?以前我们都是采 ...
- Java 枚举类型简介
目录 Java 枚举示例 Java 枚举构造函数 枚举类型是用于定义常量集合的特殊类型,更确切的说,JAVA枚举类型是一种特殊的 java 类.枚举类型可以包含常量.方法等.在 java5 中添加了 ...
- 【转载】Java枚举类型的使用
枚举类型概念 package com.lxq.enumm; public class EnumDemoOne { private enum InnerEnum { RED, GREEN, YELLOW ...
- Java枚举类型使用示例
Java枚举类型使用示例 学习了:https://www.cnblogs.com/zhaoyanjun/p/5659811.html http://blog.csdn.net/qq_27093465/ ...
- Java枚举类型的使用,数值的二进制表示
一.Java枚举类型的使用 首先请看这段代码: package java上课; public class EnumTest { public static void main(String[] arg ...
- 深入理解Java枚举类型(enum)
https://blog.csdn.net/javazejian/article/details/71333103 深入理解Java类型信息(Class对象)与反射机制 深入理解Java枚举类型(en ...
随机推荐
- AOS应用基础平台-模块开发流程
AOS平台简单介绍 AOS应用基础平台基于JavaEE技术体系,以"标准功能可复用.通用模块可配置.行业需求高速开发.异构系统无缝集成"为目标.为软件开发团队提供高效可控.随需应变 ...
- C - The C Answer (2nd Edition) - Exercise 1-1
/* Run the "hello, world" program on your system. Experiment with leaving out parts of the ...
- Cocos2d-x 3.0final 终结者系列教程16-《微信飞机大战》实现
看到cocos2d-x推出了3.1版本号,真是每月一次新版本号,速度. 另一个好消息就是http://cn.cocos2d-x.org/上线了,祝贺!啥时候把我的视频和教程放上去呢?!! . 视频下载 ...
- 小程序WePY入门(一)
全局安装或更新WePY命令行工具 npm install wepy-cli -g 在开发目录中生成Demo开发项目 wepy new myproject 切换至项目目录 cd myproject 开启 ...
- java常量池概念 (转)
在class文件中,“常量池”是最复杂也最值得关注的内容. Java是一种动态连接的语言,常量池的作用非常重要,常量池中除了包含代码中所定义的各种基本类型(如int.long等等)和对象型(如Stri ...
- 在RedHat Linux系统中安装和配置snmp服务
检查系统是否安装snmp服务 # rpm -qa|grep snmp net-snmp-5.3.2.2-17.el5 net-snmp-perl-5.3.2.2-17.el5 net-snmp-dev ...
- SpringBoot学习笔记(12):计划任务
SpringBoot学习笔记(12):计划任务 计划任务 在企业的实践生产中,可能需要使用一些定时任务,如月末.季末和年末需要统计各种各样的报表,每周自动备份数据等. 在Spring中使用定时任务 1 ...
- Cocoapods的安装以及使用
在网上看博客,看了好多次,都没有学会cocoapods,今天上午浪费了一上午的时间,终于算是学会了.其实也是很简单的. iOS 新版 CocoaPods 安装流程 1.换掉现有Ruby默认源(由于好多 ...
- 《程序员代码面试指南》第八章 数组和矩阵问题 找到无序数组中最小的k 个数
题目 找到无序数组中最小的k 个数 java代码 package com.lizhouwei.chapter8; /** * @Description: 找到无序数组中最小的k 个数 * @Autho ...
- 打开Vs2010时,卡在加载工具箱内容 不动了
我是直接打开Visual Studio 2010,而不是以打开解决方案的方式打开.然后就在左下角显示“正在从包‘Microsoft.VisualStudio.IDE.ToolboxControlsIn ...