许多枚举都与一个单独的int值进行了关联。所有的枚举都有ordinal方法,这个方法返回了每个枚举常量的位置。你也许会试着从ordinal方法里获取得到一个关联的int值:

public enum Ensemble {SOLO, DUET, TRIO, QUARTET, QUINTET, SEXTET, SEPTET, OCTET, NONET, DECTET;public int numberOfMusicians() { return ordinal() + 1; }
}

虽然这个枚举可以正常使用,但是它的维护却将是一场噩梦。如果对常量进行重排序,那么getNum方法将被破坏。如果你想再增加一个常量,并且让这个新的常量与一个已经被使用了的int值进行绑定,那也是不行的。例如,你想为双四重奏增加一个常量,而它却像八重奏一样,有8个演奏者,那么此时你也是无法做到让numberOfMusicians返回8的。

同样,若是没有为所有涉及到的int值添加常量,你也是无法为某个int值添加常量的。例如,假设你想增加一个常量用来表示一个由12个演奏者组成的三重奏。由于没有由11个演奏者组成合奏组的标准,那么此时你不得不为一个用不到的int值(11)添加一个虚拟的常量。这么做顶多就只是显得不优雅。但如果有大量的int值都是用不到的,那么这么做就不切实际了。

幸运的是,有个简单的办法可以解决这些问题。那就是,永远都不要经过某个枚举的ordinal方法来获取它的绑定值,而是要将这个值通过一个实例域来进行保存:

public enum Ensemble {SOLO(1), DUET(2), TRIO(3), QUARTET(4), QUINTET(5), SEXTET(6), SEPTET(7), OCTET(8), DOUBLE_QUARTET(8), NONET(9), DECTET(10), TRIPLE_QUARTET(12);
​private final int numberOfMusicians;Ensemble(int size) { this.numberOfMusicians = size; }public int numberOfMusicians() { return numberOfMusicians; }
}

枚举类的使用-使用实例域来替代序数相关推荐

  1. 替代if else 的方法---巧用枚举类和抽象方法

    替代if else 的方法-巧用枚举类和抽象方法 使用场景:当接收到一些数据需要对其进行处理时,由于它们来自于不同的渠道(如:腾讯,巨量),不同渠道所需的处理方式不同,下面来写一个简单Demo来展示. ...

  2. Java 使用枚举类的实例

    2019独角兽企业重金招聘Python工程师标准>>> 枚举类相信不陌生,但实际开发中或者接手之前的代码,发现大部分还是使用常量Constant来替代,其实枚举类拥有更多的优点. 这 ...

  3. 学妹问我Java枚举类与注解,我直接用这个搞定她!

    很多人问我学妹长什么样,不多说 上图吧! 学妹问我Java枚举类与注解,我直接一篇文章搞定! 一.枚举类 ① 自定义枚举类 ② enum关键字定义枚举类 ③ enum 枚举类的方法 ④ enum 枚举 ...

  4. java枚举和枚举类_Java枚举:您拥有优雅,优雅和力量,这就是我所爱!

    java枚举和枚举类 当Java 8即将面世时,您确定您对Java 5中引入的枚举很熟悉吗? Java枚举仍然被低估了,很可惜,因为它们比您想象的要有用,它们不仅仅用于通常的枚举常量! Java枚举是 ...

  5. java 枚举 注解_Java枚举类和注解梳理

    1. 枚举类 1. 枚举类的使用 枚举类的理解:类的对象只有有限个,确定的.我们称此类为枚举类. 当需要定义一组常量时,强烈建议使用枚举类. 如果枚举类中只有一个对象,则可以作为单例模式的实现方式. ...

  6. java枚举类型季节实例_Java之枚举类

    目录 一.为何引入枚举类型(为了替代魔法值) 什么是魔法值?魔法值有哪些隐患,见另一篇文章编码规约之使用Enum枚举类替代魔法值 那么为什么不用静态变量来替换魔法值呢? 有时候,变量的取值只在一个有限 ...

  7. java内置功能的使用,装箱拆箱及枚举类

    常用类(javaSE版本中内置的一系列功能) 字符串家族 了解字符串的原理和使用字符串类进行字符串的解析 字符串需要解析? web协议,http协议在网络上跑的是字符串,可以接受通过字符串获取的数据 ...

  8. Java枚举类与注解

    目录 一.枚举类的使用 1. 如何自定义枚举类 2. 如何使用关键字enum定义枚举类 3. Enum类的主要方法 4. 实现接口的枚举类(enum定义) 二.注解的使用 1. 注解概述 2. 常见的 ...

  9. day06--java高级编程:多线程,枚举类,注解,反射,网络通讯

    1 Day16–多线程01 1.1 程序概念 程序(program):是为完成特定任务.用某种语言编写的一组指令的集合.即指一段静态的代码,静态对象. 1.2 进程 1.2.1 概念 进程(proce ...

最新文章

  1. PHP 在 Nginx 下主动断开连接 Connection Close 与 ignore_user_abort 后台运行
  2. 【深度学习】实战Kaggle竞赛之线性模型解决波士顿房价预测问题(Pytorch)
  3. 3-uboot-spl代码流程
  4. bootstrap学习(三)表单
  5. 辛星浅谈PHP的混乱的编码风格
  6. linux+awk忽略tab符号,awk 如何避免文本中出现特殊符号的影响?
  7. linux内存分配器类型,内核早期内存分配器:memblock
  8. Redis 与 string 相关的常用命令
  9. 最好电脑操作系统_操作系统都有哪些呢
  10. smarty 模板不能正常加载css,js的问题
  11. 【C++】set和multiset区别
  12. 耶路撒冷三千年(笔记)
  13. markdown笔记1--设置字体、颜色、图片、背景色
  14. 【分享】“飞书自建“在集简云平台集成应用的常见问题与解决方案
  15. 【校招VIP】产品经理之明确活动目的
  16. 美国这几年的人口死亡数据
  17. 海王算法(看完不会变成海王)
  18. 【2017秋季校园招聘笔经面经专题汇总】
  19. office安装报错:1935安装程序集组件发生错误
  20. 2018-2019 C++程序设计报告

热门文章

  1. scrapy详解及主要应用场景
  2. 去除C++中string前面和后面的空白符
  3. 教你如何搭建一个骗子举报/信息查询的平台
  4. 来看看CDN网络安全防护的方案
  5. error RC2108: expected numerical dialog constant
  6. python实现DES算法
  7. 【NGINX+PHP7.3+MYSQL】安装指南
  8. 【HTTPS】Let's Encrypt certbot renew
  9. 2021夏季每日一题 【week3 完结】
  10. Redis操作Key