当变量(特别是方法参数)只能从一组可能的值中取出一个时,应该总是使用枚举。示例将是类型常量(合同状态:“永久”,“临时”,“学徒”)或标志(“立即执行”,“延迟执行”)。

如果使用枚举而不是整数(或字符串代码),则增加了编译时检查,避免传入无效常量的错误,并记录哪些值是合法使用的。

BTW,过度使用枚举可能意味着你的方法太多了(通常最好有几个单独的方法,而不是一个方法,需要几个标志,它修改它的作用),但如果你必须使用标志或类型代码,枚举是要走的路。

例如,哪个更好?

/** Counts number of foobangs.

* @param type Type of foobangs to count. Can be 1=green foobangs,

* 2=wrinkled foobangs, 3=sweet foobangs, 0=all types.

* @return number of foobangs of type

*/

public int countFoobangs(int type)

/** Types of foobangs. */

public enum FB_TYPE {

GREEN, WRINKLED, SWEET,

/** special type for all types combined */

ALL;

}

/** Counts number of foobangs.

* @param type Type of foobangs to count

* @return number of foobangs of type

*/

public int countFoobangs(FB_TYPE type)

一个方法调用:

int sweetFoobangCount = countFoobangs(3);

然后变成:

int sweetFoobangCount = countFoobangs(FB_TYPE.SWEET);

在第二个例子中,它立即清楚哪些类型是允许的,docs和实现不能失去同步,编译器可以强制这样做。

此外,一个无效的调用像

int sweetFoobangCount = countFoobangs(99);

不再可能。

java为什么需要枚举_java – 什么是枚举,为什么它们有用?相关推荐

  1. java中的枚举_Java中的枚举

    java中的枚举 Enum was introduced in Java 1.5 as a new type whose fields consists of a fixed set of const ...

  2. java什么是枚举_java中的枚举到底是什么鬼

    枚举是一种特殊的数据类型,之所以特殊是因为它既是一种类(class)类型却又比类型多了些特殊的约束,但是这些约束的存在也造就了枚举类型的简洁,安全性以及便捷性. 创建枚举类型要使用enum关键字,隐含 ...

  3. java如何映射mysql枚举_java中自定义枚举enum映射到mysql数据库字段处理器handler

    mybatis中默认的处理枚举类型的handler有 如果要处理一些特殊的情况下字段内容字段的转换,需要自定义处理器,比如如下例子要处理数据库中默认字段值为""空字符串的问题 im ...

  4. java 枚举_Java中的枚举类型(Enum)详解

    文章前记 程序员工作久了便可能整日忙碌于"增删改查"中,迷失方向,毫无进步. 该公众号致力于分享软件开发相关的原创干货,助你完成从程序员到架构师的进阶之路! 努力!做一个NB的Co ...

  5. java 动态 枚举_java 动态生成枚举值

    在某些场景下我们需要动态生成一些枚举值,主要是通过反射生成,但是这种生成枚举值是不能switch的 1.枚举值类 public enum CodeInfoEnum { LOCK(1L, 1L, &qu ...

  6. java enum 定义属性_java enum(枚举)使用详解 + 总结

    enum 的全称为 enumeration, 是 JDK 1.5  中引入的新特性,存放在 java.lang 包中. 下面是我在使用 enum 过程中的一些经验和总结,主要包括如下内容: 8. 总结 ...

  7. java枚举新特性_java回顾之枚举和新特性

    java回顾之枚举和新特性 枚举 枚举用来表示实例是固定个数的类型. 比如:季节,元注解里面学过的Retention里面RetentionPolicy也是一个注解 方法引用 格式: XXX::XXX ...

  8. java单例枚举_Java增强枚举的用例

    java单例枚举 Brian Goetz在消息" 增强枚举-用例 "中写道:"我们希望就现在实现的功能[ 增强枚举 ]获得用户反馈." 他陈述了他的消息的第一个 ...

  9. java map取值_Java Set接口 Map 与枚举

    Set接口 概述 一个不包含重复元素的 collection.更确切地讲,set 不包含满足 e1.equals(e2) 的元素对 e1 和 e2,并且最多包含一个 null 元素 特点 Set接口是 ...

最新文章

  1. Python从入门到精通 - 入门篇 (上)
  2. 《大型网站技术架构》读书笔记二:大型网站架构模式
  3. liunx 详细常用操作
  4. 17、java中的集合(4)
  5. 国外前端开发大神经验:目标越明确,计划就越专业,切记,不要撒网!
  6. 华硕2020年显卡_送自己最好的新年游戏礼物,2020年新春显卡市场完全解析
  7. 避免门事件 巧妙清除搜狗浏览器记录
  8. ckeditor:基本使用方法
  9. OSG仿真案例(4)——创建烟雾粒子效果
  10. python中stacked_栈式自动编码器(Stacked AutoEncoder)
  11. proteus元件图片_最完整的Proteus元件库元件名称及中英对照表下载
  12. mysql中存储过程和函数区别
  13. IOS版aplayer使用教程_管家婆服装版使用教程,重庆任我行管家婆服装软件的使用方法...
  14. TFTP 简单文件传输协议 简介
  15. Linux 串口termios.h分析
  16. 【配置git和github】github鉴权失败 git配置github 免密登录
  17. docker端口映射突然无效
  18. IDEA web.xml版本过低怎么生成新的
  19. ps读写ddr3里面的数据 zynq_DDR3读写数据调试
  20. 微信在线接口调试工具的使用

热门文章

  1. Tomcat端口号的修改
  2. jupyter(Anaconda)设置默认打开文件夹
  3. linux系统平均价格,简单认识Linux系统平均负载
  4. 标记三维点_便携式3D扫描仪全自动三坐标测量机三维扫描设计扫描测量摄影
  5. node本地连接服务器的数据库_基于Node.jsORM框架Sequelize的数据库迁移一
  6. Jmeter之测试片段和模块控制器应用
  7. mysql使用navicat(建表前与建表后)添加时间戳(创建时间、自动更新时间)
  8. openssl解析国密X509证书
  9. 什么都没学到,记录一个鼠标监听事件吧
  10. MarkDown 中使用 LaTeX 数学式