枚举类的使用-使用实例域来替代序数
许多枚举都与一个单独的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; }
}
枚举类的使用-使用实例域来替代序数相关推荐
- 替代if else 的方法---巧用枚举类和抽象方法
替代if else 的方法-巧用枚举类和抽象方法 使用场景:当接收到一些数据需要对其进行处理时,由于它们来自于不同的渠道(如:腾讯,巨量),不同渠道所需的处理方式不同,下面来写一个简单Demo来展示. ...
- Java 使用枚举类的实例
2019独角兽企业重金招聘Python工程师标准>>> 枚举类相信不陌生,但实际开发中或者接手之前的代码,发现大部分还是使用常量Constant来替代,其实枚举类拥有更多的优点. 这 ...
- 学妹问我Java枚举类与注解,我直接用这个搞定她!
很多人问我学妹长什么样,不多说 上图吧! 学妹问我Java枚举类与注解,我直接一篇文章搞定! 一.枚举类 ① 自定义枚举类 ② enum关键字定义枚举类 ③ enum 枚举类的方法 ④ enum 枚举 ...
- java枚举和枚举类_Java枚举:您拥有优雅,优雅和力量,这就是我所爱!
java枚举和枚举类 当Java 8即将面世时,您确定您对Java 5中引入的枚举很熟悉吗? Java枚举仍然被低估了,很可惜,因为它们比您想象的要有用,它们不仅仅用于通常的枚举常量! Java枚举是 ...
- java 枚举 注解_Java枚举类和注解梳理
1. 枚举类 1. 枚举类的使用 枚举类的理解:类的对象只有有限个,确定的.我们称此类为枚举类. 当需要定义一组常量时,强烈建议使用枚举类. 如果枚举类中只有一个对象,则可以作为单例模式的实现方式. ...
- java枚举类型季节实例_Java之枚举类
目录 一.为何引入枚举类型(为了替代魔法值) 什么是魔法值?魔法值有哪些隐患,见另一篇文章编码规约之使用Enum枚举类替代魔法值 那么为什么不用静态变量来替换魔法值呢? 有时候,变量的取值只在一个有限 ...
- java内置功能的使用,装箱拆箱及枚举类
常用类(javaSE版本中内置的一系列功能) 字符串家族 了解字符串的原理和使用字符串类进行字符串的解析 字符串需要解析? web协议,http协议在网络上跑的是字符串,可以接受通过字符串获取的数据 ...
- Java枚举类与注解
目录 一.枚举类的使用 1. 如何自定义枚举类 2. 如何使用关键字enum定义枚举类 3. Enum类的主要方法 4. 实现接口的枚举类(enum定义) 二.注解的使用 1. 注解概述 2. 常见的 ...
- day06--java高级编程:多线程,枚举类,注解,反射,网络通讯
1 Day16–多线程01 1.1 程序概念 程序(program):是为完成特定任务.用某种语言编写的一组指令的集合.即指一段静态的代码,静态对象. 1.2 进程 1.2.1 概念 进程(proce ...
最新文章
- PHP 在 Nginx 下主动断开连接 Connection Close 与 ignore_user_abort 后台运行
- 【深度学习】实战Kaggle竞赛之线性模型解决波士顿房价预测问题(Pytorch)
- 3-uboot-spl代码流程
- bootstrap学习(三)表单
- 辛星浅谈PHP的混乱的编码风格
- linux+awk忽略tab符号,awk 如何避免文本中出现特殊符号的影响?
- linux内存分配器类型,内核早期内存分配器:memblock
- Redis 与 string 相关的常用命令
- 最好电脑操作系统_操作系统都有哪些呢
- smarty 模板不能正常加载css,js的问题
- 【C++】set和multiset区别
- 耶路撒冷三千年(笔记)
- markdown笔记1--设置字体、颜色、图片、背景色
- 【分享】“飞书自建“在集简云平台集成应用的常见问题与解决方案
- 【校招VIP】产品经理之明确活动目的
- 美国这几年的人口死亡数据
- 海王算法(看完不会变成海王)
- 【2017秋季校园招聘笔经面经专题汇总】
- office安装报错:1935安装程序集组件发生错误
- 2018-2019 C++程序设计报告