From 85d02fd51ab02d5771ecae73cc973b488b9244bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=89=E5=8B=87=E5=BC=BA2?= Date: Thu, 16 Apr 2020 20:14:52 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BD=BF=E7=94=A8=E6=8E=A5=E5=8F=A3=E6=A8=A1?= =?UTF-8?q?=E6=8B=9F=E5=8F=AF=E6=89=A9=E5=B1=95=E7=9A=84=E6=9E=9A=E4=B8=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ch06枚举和注解/36.使用EnumSet替代位属性.md | 36 +++++++++++ ch06枚举和注解/37.使用EnumMap替代序数索引.md | 47 ++++++++++++++ ch06枚举和注解/38.使用接口模拟可扩展的枚举.md | 29 +++++++++ .../java/com/jueee/item37/Item37Example01.java | 62 +++++++++++++++++++ .../java/com/jueee/item37/Item37Example02.java | 59 ++++++++++++++++++ .../java/com/jueee/item37/Item37Example03.java | 36 +++++++++++ .../java/com/jueee/item37/Item37Example04.java | 45 ++++++++++++++ .../main/java/com/jueee/item38/BasicOperation.java | 43 +++++++++++++ .../java/com/jueee/item38/ExtendedOperation.java | 26 ++++++++ .../java/com/jueee/item38/Item38Example01.java | 19 ++++++ .../java/com/jueee/item38/Item38Example02.java | 26 ++++++++ .../src/main/java/com/jueee/item38/Operation.java | 7 +++ 12 files changed, 435 insertions(+) create mode 100644 ch06枚举和注解/36.使用EnumSet替代位属性.md create mode 100644 ch06枚举和注解/37.使用EnumMap替代序数索引.md create mode 100644 ch06枚举和注解/38.使用接口模拟可扩展的枚举.md create mode 100644 ch06枚举和注解/EnumsAnnotations/src/main/java/com/jueee/item37/Item37Example01.java create mode 100644 ch06枚举和注解/EnumsAnnotations/src/main/java/com/jueee/item37/Item37Example02.java create mode 100644 ch06枚举和注解/EnumsAnnotations/src/main/java/com/jueee/item37/Item37Example03.java create mode 100644 ch06枚举和注解/EnumsAnnotations/src/main/java/com/jueee/item37/Item37Example04.java create mode 100644 ch06枚举和注解/EnumsAnnotations/src/main/java/com/jueee/item38/BasicOperation.java create mode 100644 ch06枚举和注解/EnumsAnnotations/src/main/java/com/jueee/item38/ExtendedOperation.java create mode 100644 ch06枚举和注解/EnumsAnnotations/src/main/java/com/jueee/item38/Item38Example01.java create mode 100644 ch06枚举和注解/EnumsAnnotations/src/main/java/com/jueee/item38/Item38Example02.java create mode 100644 ch06枚举和注解/EnumsAnnotations/src/main/java/com/jueee/item38/Operation.java diff --git a/ch06枚举和注解/36.使用EnumSet替代位属性.md b/ch06枚举和注解/36.使用EnumSet替代位属性.md new file mode 100644 index 0000000..fb5522e --- /dev/null +++ b/ch06枚举和注解/36.使用EnumSet替代位属性.md @@ -0,0 +1,36 @@ +## 使用 EnumSet 替代位属性 + +如果枚举类型的元素主要用于集合中: + +- [Item36Example01.java](EnumsAnnotations/src/main/java/com/jueee/item36/Item36Example01.java):传统上使用 int 枚举模式,将 2 的不同次幂赋值给每个常量。 + + 这种表示方式允许你使用按位或(or)运算将几个常量合并到一个称为位域的集合中。 + + 位域表示还允许你使用按位算术有效地执行集合运算,如并集和交集。 + + 但是位域具有 `int` 枚举常量等的所有缺点: + + - 当打印为数字时,解释位域比简单的 `int` 枚举常量更难理解。 + - 没有简单的方法遍历所有由位域表示的元素。 + - 必须预测在编写 API 时需要的最大位数,并相应地为位域(通常为 `int` 或 `long`)选择一种类型。 + +- [Item36Example02.java](EnumsAnnotations/src/main/java/com/jueee/item36/Item36Example02.java):使用枚举而不是 `int` 常量。 + + `java.util` 包提供了 `EnumSet` 类来有效地表示从单个枚举类型中提取的值集合。 + + 这个类实现了 `Set` 接口,提供了所有其他 `Set` 实现的丰富性,类型安全性和互操作性。 + + 请注意,`applyStyles` 方法采用`Set