最近在做一个项目,其中涉及到一组操作,命名为: 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枚举类型的优势在哪里?--一个实例的更多相关文章

  1. java 枚举类型分析

    最近做android开发,需要用到枚举值,这样可以连续赋值,我按之前c++那样书写,如下所示: public enum ColorSelect { RED_BAGE = 0, GREEN_BAGE, ...

  2. 【转】java枚举类型enum的使用

    原文网址:http://blog.csdn.net/wgw335363240/article/details/6359614 java 枚举类型enum 的使用 最近跟同事讨论问题的时候,突然同事提到 ...

  3. 【转】掌握java枚举类型(enum type)

    原文网址:http://iaiai.iteye.com/blog/1843553 1   背景 在java语言中还没有引入枚举类型之前,表示枚举类型的常用模式是声明一组具有int常量.之前我们通常利用 ...

  4. 转载 java枚举类型enum的使用 (原文地址:http://blog.csdn.net/wgw335363240/article/details/6359614)

    java枚举类型enum的使用 最近跟同事讨论问题的时候,突然同事提到我们为什么java中定义的常量值不采用enmu枚举类型,而采用public final static 类型来定义呢?以前我们都是采 ...

  5. Java 枚举类型简介

    目录 Java 枚举示例 Java 枚举构造函数 枚举类型是用于定义常量集合的特殊类型,更确切的说,JAVA枚举类型是一种特殊的 java 类.枚举类型可以包含常量.方法等.在 java5 中添加了 ...

  6. 【转载】Java枚举类型的使用

    枚举类型概念 package com.lxq.enumm; public class EnumDemoOne { private enum InnerEnum { RED, GREEN, YELLOW ...

  7. Java枚举类型使用示例

    Java枚举类型使用示例 学习了:https://www.cnblogs.com/zhaoyanjun/p/5659811.html http://blog.csdn.net/qq_27093465/ ...

  8. Java枚举类型的使用,数值的二进制表示

    一.Java枚举类型的使用 首先请看这段代码: package java上课; public class EnumTest { public static void main(String[] arg ...

  9. 深入理解Java枚举类型(enum)

    https://blog.csdn.net/javazejian/article/details/71333103 深入理解Java类型信息(Class对象)与反射机制 深入理解Java枚举类型(en ...

随机推荐

  1. iOS 应用发布

    本文转载至  http://blog.csdn.net/ysy441088327/article/details/7833579 苹果为广大的开发者提供了一个很好的应用生态环境 参考资料: 1:如何向 ...

  2. python 基础 1.5 python数据类型(四)--字典

    一.python 数据类型--字典 1.用字符串存储信息,如:存储“姓名,身高,性别”: In [1]: info='Tom 170 M' //字符串存储信息 In [3]: info[0:3] // ...

  3. IOS GameCenter验证登陆

    #import "GameKitHelper.h" #import "GameConstants.h" @interface GameKitHelper () ...

  4. Socket的错误码和描述

    //下面是Socket Error的错误码和描述: Socket error 0 - Directly send error  Socket error 10004 - Interrupted fun ...

  5. 九度OJ 1051:数字阶梯求和 (大数运算)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:6718 解决:2280 题目描述: 给定a和n,计算a+aa+aaa+a...a(n个a)的和. 输入: 测试数据有多组,输入a,n(1&l ...

  6. 九度OJ 1016:火星A+B (进制转换)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:4913 解决:1334 题目描述:     读入两个不超过25位的火星正整数A和B,计算A+B.需要注意的是:在火星上,整数不是单一进制的, ...

  7. WePY根据环境变量来改变运行时的参数

    WePY根据环境变量来改变运行时的参数 · Tencent/wepy Wiki https://github.com/Tencent/wepy/wiki/WePY%E6%A0%B9%E6%8D%AE% ...

  8. /etc/init.d/iptables stop

    /etc/init.d/iptables stop     systemctl stop firewalld.service   [root@bigdata-server-01 myrestserve ...

  9. 【题解】数字组合(NTT+组合 滑稽)

    [题解]数字组合(NTT+组合 滑稽) 今天实践一下谢总讲的宰牛刀233,滑稽. \((1+x)(1+x)(1+x)\)的\(x^2\)系数就代表了有三个一快钱硬币构成的两块钱的方案数量. 很好理解, ...

  10. 我的Java开发学习之旅------>使用Working Setst将Eclipse中的项目分类使项目一目了然

    今天发现Eclipse中若有太多的项目,杂七杂八的,看起来会非常的痛苦.今天请教公司的前辈学会了一个方法,在Eclipse中,当项目比较多的时候,我们可以用WorkingSet将这些项目分类,把相关连 ...