## 第六章：枚举和注解。ITEM30：用enum代替int常量。&ITEM32：用EnumSet代替位域。&ITEM33：用EnumMap代替序数索引。 原

t
twoslow

`````` 1 package com.twoslow.cha6;
2
3 import java.util.HashMap;
4 import java.util.Map;
5
6 public enum Operation {
7
8     PLUS("+") {
9         @Override
10         double apply(double x, double y) {
11             return x + y;
12         }
13     },MINUS("-") {
14         @Override
15         double apply(double x, double y) {
16             return x - y;
17         }
18     },TIMES("*")  {
19         @Override
20         double apply(double x, double y) {
21             return x * y;
22         }
23     },DIVIDE("/"){
24         @Override
25         double apply(double x, double y) {
26             return x / y;
27         }
28     };
29
30     private static final Map<String, Operation> stringToEnum = new HashMap<String, Operation>() ;
31
32     //将定制的字符串表示法变回相应的枚举。
33     static {
34         for(Operation op : values()) {
35             stringToEnum.put(op.toString(), op) ;
36         }
37     }
38
39     public static Operation fromString(String symbol) {
40         return stringToEnum.get(symbol) ;
41     }
42
43     private final String symbol ;
44
45     Operation(String symbol) {
46         this.symbol = symbol ;
47     }
48
49     public String toString() {
50         return symbol ;
51     }
52
53     abstract double apply(double x  ,double y) ;
54 }``````
``````1 public class Text {
2   public enum Style { BOLD, ITALIC, UNDERLINE, STRIKETHROUGH }
3   public void applyStyles(Set<Style> styles) { ... }
4
5 }
6 //使用方式如下:
7 text.applyStyles(EnumSet.of(Style.BOLD,Style.ITALIC));``````

`````` 1 package com.twoslow.cha6;
2
3 public class Herb {
4     public enum Type { ANNUAL, PERENNIAL, BIENNIAL }
5     private final String name;
6     private final Type type;
7
8     Herb(String name, Type type) {
9         this.name = name;
10         this.type = type;
11     }
12
13     @Override
14     public String toString() {
15         return name;
16     }
17 }``````
`````` 1 public static void main(String[] args) {
2         Herb[] garden = ...;
3         Map<Herb.Type, Set<Herb>> herbsByType =new EnumMap<Herb.Type, Set<Herb>>(Herb.Type.class);
4
5         for (Herb.Type t : Herb.Type.values()) {
6             herbsByType.put(t, new HashSet<Herb>());
7         }
8         for (Herb h : garden) {
10         }
11         System.out.println(herbsByType);
12     }``````

t

### twoslow

【06】Effective Java - 枚举和注解

1、用enum代替int常量 （1）int枚举模式 public static final int APPLE_FUJI = 0; 比较脆弱，如果与枚举常量关联的int发生了变化，客户端需重新编译。另外没有便利的方法将常量名称打印出来...

xixicat
2014/07/11
0
0
Effective Java 笔记（二）

bapleliu
2016/05/31
44
0
java枚举类型enum的使用

java 枚举类型enum 的使用 最近跟同事讨论问题的时候，突然同事提到我们为什么java 中定义的常量值不采用enmu 枚举类型，而采用public final static 类型来定义呢？以前我们都是采用这种方式...

2014/08/25
0
0
java枚举类型enum的使用

java 枚举类型enum 的使用 最近跟同事讨论问题的时候，突然同事提到我们为什么java 中定义的常量值不采用enmu 枚举类型，而采用public final static 类型来定义呢？以前我们都是采用这种方式...

2014/05/10
0
0
java枚举的用法

lwang_IT
2017/12/25
0
0

SpringBoot2.x配置Cors跨域

SpringBoot2.x配置Cors跨域 1 跨域的理解 跨域是指：浏览器A从服务器B获取的静态资源，包括Html、Css、Js，然后在Js中通过Ajax访问C服务器的静态资源或请求。即：浏览器A从B服务器拿的资源，...

19分钟前
1
0

**摘要：**计算机网络基础 作者：浪里行舟 Fundebug经授权转载，版权归原作者所有。 引言 网络协议是每个前端工程师都必须要掌握的知识，TCP/IP 中有两个具有代表性的传输层协议，分别是 TC...

Fundebug
20分钟前
2
0
Hanlp1.7版本的新增功能一览

Hanlp1.7版本在去年下半年的时候就随大快的DKH1.6版本同时发布了，截至目前1.7大版本也更新到了1.7.1了。本篇分别就1.7.0和1.7.1中新增的功能做一个简单的汇总介绍。 HanLP 是由一系列模型与...

28分钟前
1
0
Linux之PAM可动态加载的认证模块

28分钟前
1
0

36分钟前
4
0