zoukankan      html  css  js  c++  java
  • 第32条:用EnumSet代替位域

    如果一个枚举类型的元素主要用在集合中,一般使用int枚举模式,将2的不同倍数赋予每个常量:

    public class Text {
        public static final int STYLE_BOLD = 1 << 0;
        public static final int STYLE_ITALIC = 1 << 1;
        public static final int STYLE_UNDERLINE = 1 << 2;
        public static final int STYLE_STRIKETHROUGH = 1 << 3;
        
        public void applyStyles(int styles) {
            ...
        }
    }
    text.applyStyles(STYLE_BOLD | STYLE_ITALIC);

    表示为文字添加STYLE_BOLD和STYLE_ITALIC两种风格。

    如果文字要添加的风格很多,applyStyles的参数就非常长,而且,当有64种风格以上的时候,就没法使用这种办法,因为1<<65已经超出了int的范围。

    java.util包提供了EnumSet类来有效地表示从单个枚举类型中提取多个值的多个集合,这个类实现Set接口,提供丰富的功能、类型安全性,以及可以从任何其他Set实现中得到的互用性。

    public class Text {
        public enum Style {BOLD, ITALIC, UNDERLINE, STRIKETHROUGH};
    
        public void applyStyles(Set<Style> styles) {
            ...
        }
    }

    EnumSet提供静态工厂来创建集合,

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

    EnumSet.of方法返回一个包含Style.BOLD, Style.ITALIC的集合。

  • 相关阅读:
    SP6779 GSS7
    P2218 [HAOI2007]覆盖问题
    day10-包的定义和内部类
    day09-final、多态、抽象类、接口
    day08-代码块和继承
    day07-变量,封装
    day05-方法、数组
    day04-switch、循环语句
    day03-运算符、键盘录入
    day02-基本概念
  • 原文地址:https://www.cnblogs.com/13jhzeng/p/5729893.html
Copyright © 2011-2022 走看看