Effective Java~35. 用实例域代替序数

许多枚举通常与单个 int 值关联。所有枚举都有一个 ordinal 方法,它返回每个枚举常量类型的数值位置。你可能想从序数中派生一个关联的 int 值:

// Abuse of ordinal to derive an associated value - DON'T DO THIS
public enum Ensemble {SOLO, DUET, TRIO, QUARTET, QUINTET,SEXTET, SEPTET, OCTET, NONET, DECTET;public int numberOfMusicians() { return ordinal() + 1; }
}

        虽然这个枚举能正常工作,但对于维护来说则是一场噩梦。如果常量被重新排序,numberOfMusicians 方法将会中断。

        幸运的是,这些问题有一个简单的解决方案。 永远不要从枚举的序号中得出与它相关的值; 请将其保存在实例属性中

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; }
}

        枚举规范对此 ordinal 方法说道:“大多数程序员对这种方法没有用处。 它被设计用于基于枚举的通用数据结构,如 EnumSet 和 EnumMap 。“除非你在编写这样数据结构的代码,否则最好避免用 ordinal 方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/496163.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

史上最牛房屋中介

“没钱就不要学人家买房。” “你不要跟他解释,你跟他说也没用。” “你买的房子在哪我也知道,你有老人孩子,你总有不在家的时候吧?”这是我和老婆买房的亲身经历,上海汉居房地产中介老板的雷人语录。1. 看完房子后到中…

科学互驳:大脑细胞活到老,长到老?

来源:中国生物技术网 作者:格格科学家发现,人脑中与学习、记忆和情感相关的区域在成年后依然会持续产生新的神经元。这与过去的理论恰恰相反,即青春期之后大脑停止产生新的神经元。这项发现有助于我们开发治疗神经系统疾病的新方…

linux非阻塞通话编程,linux 非阻塞式socket编程求助。。

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼一下客户端:#include#include#include#include#include#include#include#include#include#include#include#define MAXDATASIZE 256#define SERVPORT 4444#define STDIN 0int main(void){int sockfd;int recvbytes;char…

Linux 环境变量配置

From:https://www.linuxidc.com/Linux/2015-08/121192.htm .bash_profile和.bashrc的区别(如何设置生效):https://www.cnblogs.com/persist/p/5197561.html Linux中环境变量包括系统级和用户级,系统级的环境变量是每个登录到系统的用户都要读…

Effective Java~36. 用EnumSet 代替位域

如果枚举类型的元素主要用于集合中,一般来说使用 int 枚举模式(条目 34),下面将 2 的不同倍数赋值给每个常量: // Bit field enumeration constants - OBSOLETE! public class Text {public static final int STYLE_B…

在ACCESS中使用Group By语句

这样写不行,认为金额是一个变量 SELECT 编号, sum(本金) AS 金额 FROM sk GROUP BY 编号 ORDER BY 金额 只有这样 select * from (SELECT 编号, sum(本金) AS 金额 FROM sk GROUP BY 编号) ORDER BY 金额转载于:https://www.cnblogs.com/vincentfeng/archive/2009/1…

AI综述专栏 | 朱松纯教授浅谈人工智能:现状、任务、构架与统一

作者:朱松纯来源:人工智能前沿讲习班导读本文作者:朱松纯,加州大学洛杉矶分校UCLA统计学和计算机科学教授,视觉、认知、学习与自主机器人中心主任。文章前四节浅显探讨什么是人工智能和当前所处的历史时期,…

linux的grub损坏,如何利用Grub命令启动损坏的Linux系统?

能你的电脑因为某些原因损坏不能自动启动了。当然原因很多,可能的现象也很多。这里说一下这种情况下的处理方法,即:屏幕上提示 “ grub> ” ,但你的硬盘上数据没有丢失,各分区都是好的。这种情况是你的 grub 信息损…

.net打包自动安装数据库

一).创建部署项目 1. 在“文件”菜单上指向“添加项目”,然后选择“新建项目”。 2. 在“添加新项目”对话框中,选择“项目类型”窗格中的“安装和部署项目”,然后选择“模板”窗格中的“安装项目”。在“名称”框中键入 setup1。 3. 单击“确…

Effective Java~37. 用EnumMap 代替序数索引

有时可能会看到使用 ordinal 方法(条目 35)来索引到数组或列表的代码。 例如,考虑一下这个简单的类来代表一种植物: class Plant {enum LifeCycle { ANNUAL, PERENNIAL, BIENNIAL }final String name;final LifeCycle lifeCycle;…

Python操作MSSQL

Python连接SQL Server数据库 - pymssql使用基础:https://www.cnblogs.com/baiyangcao/p/pymssql_basic.html 廖雪峰官网 之 Python 访问数据库(SQLLite / MySQL / SQLAlchemy) pymssql examples :http://pymssql.org/en/stable/p…

联想linux笔记本评测,联想(lenovo)G460AL-ITH Linux笔记本电脑接口评测-ZOL中关村在线...

模具和外观的“革新”让我们见识到不一样的联想G460,而在整机的接口扩展能力方面依旧主打实用性。机身左侧从左至右依次是安全锁孔、散热孔、RJ-45以太网接口、VGA视频输出接口、USB2.0接口、e-SATA接口(兼容USB2.0)、Express Card卡槽和HDMI高清视频输出接口。与前…

联合国召开会议讨论“杀手机器人”问题

来源:中国科学报 作者:赵熙熙来自29个国家的57位科学家日前呼吁联合抵制一所韩国大学,因为设立在该校的一个新的中心旨在利用人工智能强化国家安全。人工智能科学家表示,该大学正在开发自主武器,又称“杀手机器人”&a…

Effective Java~38. 用接口模拟可扩展的enum

使用枚举类型有一个很好的方法来实现这种效果。基本思想是利用枚举类型可以通过为 opcode 类型定义一个接口,并实现任意接口。 // Emulated extensible enum using an interface public interface Operation {double apply(double x, double y); } public enum Ba…

C语言的叙述大小写字母e1相同,第1、2章C语言基础练习题

第1章 C语言基础 第2章 顺序结构 练习题 学号: 姓名:单选:1. 当代电子计算机能够自动地处理指定的问题是因为( )。A. 计算机是电动的B. 有解决该问题的计算机程序 C. 事先存储了解决该问题的程序 D. 以上都不是2. C语言源程序的基本单位是( )…

咱也开始玩z-blog了

目前来讲,国内的个人网站基本上用wordPress于z-blog的比较多,wordPress用PHP开发的,z-blog用的是asp,鉴于PHP空间相对asp对一些,维护起来也比asp麻烦一点,众多个人站长中,相信看得懂一点asp的比…

Python 执行 shell命令 的几个方法小结

参考:https://blog.csdn.net/ronnyjiang/article/details/53333538 Python 执行 shell 命令 Python 可以执行 shell 命令的相关 模块 和 函数 有: os.systemos.spawnos.popen --- 废弃popen2.* --- 废弃commands.* --- 废弃&#x…

linux离线安装docker,centos离线安装docker

1.下载依赖包提取码: 3tus2. 先安装如下rpm依赖文件audit-libs-python-2.8.4-4.el7.x86_64.rpmcheckpolicy-2.5-8.el7.x86_64.rpmlibcgroup-0.41-20.el7.x86_64.rpmlibseccomp-2.3.1-3.el7.x86_64.rpmlibsemanage-python-2.5-14.el7.x86_64.rpmpolicycoreutils-2.5-29.el7.x86…

Effective Java~42. Lambda 优于匿名类

在 Java 8 中,添加了函数式接口, lambda 表达式和方法引用,以便更容易地创建函数对象。下面是一段代码片段,按照字符串长度顺序对列表进行排序,使用匿名类创建排序的比较方法 (强制排序顺序)&am…

Python 远程部署利器 Fabric2 模块

fabric 官网英文文档:http://www.fabfile.org/ 《Python自动化运维技术与最佳实践》 如何用 Fabric 实现无密码输入提示的远程自动部署: fabric实现远程操作和部署: 简介 Fabric 是一个 Python 的库,同时它也是一个命令行工具。…