什么是位域?为什么用到它?

先来看一个例子:

public class Test {public static final byte STYLE_BOLD          = 1<<0; // 1public static final byte STYLE_ITALIC        = 1<<1; // 2public static final byte STYLE_UNDERLINE     = 1<<2; // 4public static final byte STYLE_STRIKETHROUGH = 1<<3; // 6//Parameter is bitwise OR of zero or more STYLE_ constantspublic void applyStyles(int styles) { ... }
}

这种方法让我们将OR位运算将几个常量合并在一个集合中,称作位域。
text.applyStyles(STYLE_BLOD | STYLE_ITATIC)
这种方式有着int枚举的所有缺点,甚至更多

于是我们需要用EnumSet代替位域。

public class Text{public enum Style{BOLD,ITALIC,UNDERLINE,STRIKETHROUGH}public void applyStyles(Set<Style> styles){//实现方案}}

只需要客户端传入EnumSet即可,EnumSet是一个Enum对象的Set。
text.applyStyles(EnumSet.of(Style.BOLD,Style.ITALIC));

Effective Java之用EnumSet代替位域(三十二)相关推荐

  1. Effective Java~36. 用EnumSet 代替位域

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

  2. Effective Java之注解优于命名模式(三十五)

    Java 1.5之前,一般使用命名模式表明有些程序元素需要通过某种工具或者框架进行特殊处理.例如,JUnit测试框架原本要求用户一定要用test作为测试方法名称的开头. 命名模式的缺点: 文字拼写错误 ...

  3. Effective Java之必要时进行保护性拷贝(三十九)

    我们来看一个不可变对象的攻守问题: public class Period{private final Date startTime;private finale Date endTime;publi ...

  4. Effective Java之检查参数的有效性(三十八)

    检查参数的有效性实际上是满足了这一条普遍原则: 应该在发生错误之后尽快检测出错误. 例子: 有个数据库查询的例子,传入一个id,查出一个Student对象,然而返回null,如果没有及时检查这个实例是 ...

  5. Effective Java之坚持使用Overide注解(三十六)

    @Override 注解: 表示被注解的方法声明覆盖了超类型中的一个声明 1.我们应该在想要覆盖超类声明的每个方法声明中使用 Override 注解 ; 如果使用了Override注解的方法是重载而不 ...

  6. Effective Java之通过接口引用对象(五十二)

    List< ? > list= new ArrayList< ? > Map< ?,? > map = new HashMap< ?,? > 这样使用接 ...

  7. Effective Java之保护性编写readObject方法(七十六)

    readObject方法实际上相当于另一个公有的构造器,与其他构造器一样,它也需要进行参数的有效性检查与保护性拷贝.参考:Effective Java之必要时进行保护性拷贝(三十九) 原因很简单,为了 ...

  8. 三十二、Java集合中的ArrayList

    @Author:Runsen @Date:2020/6/3 作者介绍:Runsen目前大三下学期,专业化学工程与工艺,大学沉迷日语,Python, Java和一系列数据分析软件.导致翘课严重,专业排名 ...

  9. 【零基础学Java】—Java 日期时间(三十二)

    [零基础学Java]-Java 日期时间(三十二) DateFormat 是日期/时间格式化子类的抽象类,它以语言无关的方式格式化和分析日期或时间. 日期/时间格式化子类(如SimpleDateFor ...

最新文章

  1. iOS:一句代码实现文本输入的限制
  2. 高校复试计算机英语文献翻译,专业文献英语翻译复试.pdf
  3. ORA-12638: 身份证明检索失败 解决方法
  4. 深度学习核心技术精讲100篇(七十九)-深度学习应用实战案例:携程金融自动化迭代反欺诈模型体系
  5. boost::intrusive::avl_set用法的测试程序
  6. bazel 链接_bazel-链接第三方动态库,静态库。
  7. Json转换利器Gson-Gson注解和GsonBuilder
  8. 拼多多砍价小程序源码/流量主系列微信小程序源码
  9. 海康,大华 RTSP取流URL格式
  10. 面向光栅薄膜光学性能探究的Rsoft建模与仿真
  11. 苹果服务器系统状态查询网站,mac电脑服务器地址怎么查看
  12. 前端下载excel文件的两种方法
  13. 从正则表达式到NFA:Thompson构造法
  14. CSA发布 | 《区块链的十大攻击、漏洞及弱点》
  15. DOSBox使用总结——调整DOSBox窗口并自动挂载指定目录
  16. 是否可以同时学习两门编程语言?——我的语言学习经验告诉我不行
  17. 日记 or 小小说 :想进腾讯的师弟师妹们,别学我 (二)
  18. xlwt对excel表的写入操作
  19. win10如何修改hosts文件?
  20. 程序员必读经典书籍推荐

热门文章

  1. OSI七层网络模型与TCP/IP四层网络
  2. Linux 权限管理: 权限的概念、权限管理、文件访问权限的设置、 粘滞位
  3. 第30讲:如何爬app的数据
  4. QUIC 是如何解决TCP 性能瓶颈的?
  5. 一篇漫画,看懂云计算!
  6. 如此简单 | ElasticSearch 最全详细使用教程
  7. 查询速度提升200倍,ClickHouse到底有多快?
  8. Mark一下 | 当当优惠码,实付满150减30 | + 荐书
  9. Soul网关发布2.1.X之后,它到底有多方便?
  10. 互动场景下的低延迟编码技术