Effective Java~36. 用EnumSet 代替位域

        如果枚举类型的元素主要用于集合中,一般来说使用 int 枚举模式(条目 34),下面将 2 的不同倍数赋值给每个常量:

// Bit field enumeration constants - OBSOLETE!
public class Text {public static final int STYLE_BOLD = 1 << 0; // 1public static final int STYLE_ITALIC = 1 << 1; // 2public static final int STYLE_UNDERLINE = 1 << 2; // 4public static final int STYLE_STRIKETHROUGH = 1 << 3; // 8// Parameter is bitwise OR of zero or more STYLE_ constantspublic void applyStyles(int styles) { ... }
}

        这种表示方式允许你使用按位或(or)运算将几个常量合并到一个称为位属性(bit field)的集合中:

text.applyStyles(STYLE_BOLD | STYLE_ITALIC);

        java.util 包提供了 EnumSet 类来有效地表示从单个枚举类型中提取的值集合。 这个类实现了
Set 接口,提供了所有其他 Set 实现的丰富性,类型安全性和互操作性。 但是在内部,每个 EnumSet 都表示为一个位矢量(bit vector)。 如果底层的枚举类型有 64 个或更少的元素,并且大多数情况下,整个 EnumSet 用单个 long 表示,所以它的性能与位属性的性能相当。 批量操作(如 removeAll 和 retainAll )是使用按位算术实现的,就像你为位属性手动操作一样。

// EnumSet - a modern replacement for bit fields
public class Text {public enum Style { BOLD, ITALIC, UNDERLINE, STRIKETHROUGH }// Any Set could be passed in, but EnumSet is clearly bestpublic void applyStyles(Set<Style> styles) { ... }
}

        这里是将 EnumSet 实例传递给 applyStyles 方法的客户端代码。 EnumSet 类提供了一组丰富的静态工厂,可以轻松创建集合,其中一个代码如下所示:

text.applyStyles(EnumSet.of(Style.BOLD, Style.ITALIC));

        请注意, applyStyles 方法采用Set<Style> 而不是EnumSet<Style> 参数。 尽管所有客户端都可能会将EnumSet 传递给该方法,但接受接口类型而不是实现类型通常是很好的做法(条目 64)。

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

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

相关文章

在ACCESS中使用Group By语句

这样写不行&#xff0c;认为金额是一个变量 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综述专栏 | 朱松纯教授浅谈人工智能:现状、任务、构架与统一

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

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

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

.net打包自动安装数据库

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

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

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

Python操作MSSQL

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

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

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

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

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

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

使用枚举类型有一个很好的方法来实现这种效果。基本思想是利用枚举类型可以通过为 opcode 类型定义一个接口&#xff0c;并实现任意接口。 // 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章 顺序结构 练习题 学号&#xff1a; 姓名&#xff1a;单选&#xff1a;1. 当代电子计算机能够自动地处理指定的问题是因为( )。A. 计算机是电动的B. 有解决该问题的计算机程序 C. 事先存储了解决该问题的程序 D. 以上都不是2. C语言源程序的基本单位是( )…

咱也开始玩z-blog了

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

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

参考&#xff1a;https://blog.csdn.net/ronnyjiang/article/details/53333538 Python 执行 shell 命令 Python 可以执行 shell 命令的相关 模块 和 函数 有&#xff1a; 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 中&#xff0c;添加了函数式接口&#xff0c; lambda 表达式和方法引用&#xff0c;以便更容易地创建函数对象。下面是一段代码片段&#xff0c;按照字符串长度顺序对列表进行排序&#xff0c;使用匿名类创建排序的比较方法 &#xff08;强制排序顺序&#xff09;&am…

Python 远程部署利器 Fabric2 模块

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

【转】近期Coolite控件的技术点总结

1。Coolite下如何自定义控件样式表Code1<style type"text/css"> 2 .x-grid3-td-fullName .x-grid3-cell-inner {}{ 3 font-family:tahoma, verdana; 4 display:block; 5 font-weight:normal; 6 font-style…

Anaconda 完全入门指南

From&#xff1a;https://www.jianshu.com/p/eaee1fadc1e9 Anaconda官网&#xff1a;https://www.anaconda.com/ Anaconda 官网 文档&#xff1a;http://docs.anaconda.com/anaconda/user-guide Anaconda介绍、安装及使用教程&#xff1a;https://zhuanlan.zhihu.com/p/32925…

Effective Java~43. 方法引用优于Lambda

Java 提供了一种生成函数对象的方法&#xff0c;比 lambda 还要简洁&#xff0c;那就是&#xff1a;方法引用&#xff08; method references&#xff09;。下面是一段程序代码片段&#xff0c;它维护一个从任意键到整数值的映射。如果将该值解释为键的实例个数&#xff0c;则该…

linux资源使用统计指南,指南:工作量分析文档

指南&#xff1a;工作量分析文档工作量分析文档工作量分析文档用于在不同的性能测试中确定要使用的变量并定义变量值&#xff0c;利用这些性能测试可以模拟主角特征、最终用户业务功能(用例)、负载和容量。主题软件质量要从不同的维度来进行评估&#xff0c;其中包括可靠性、功…

linux 下修改日期和时间

我们一般使用“date -s”命令来修改系统时间。比如将系统时间设定成2009年11月13日的命令如下。 #date -s 11/13/09 将系统时间设定成下午1点12分0秒的命令如下。#date -s 13:12:00 ---- 注意&#xff0c;这里说的是系统时间&#xff0c;是linux由操作系统维护的。 ---- 在系统…