文档章节

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

t
 twoslow
发布于 2014/09/04 15:03
字数 432
阅读 14
收藏 0
 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));

在一个花园里面有很多的植物,它们被分成 3 类,分别是一年生(ANNUAL)、多年生(PERENNIAL)和两年生(BIENNIAL),正好对应着 Herb.Type 中的枚举值。

现在我们需要做的是遍历花园中的每一个植物,并将这些植物分为 3 类,最后再将分类后的植物分类打印出来:

 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) {
 9             herbsByType.get(h.type).add(h);
10         }
11         System.out.println(herbsByType);
12     }

 

© 著作权归作者所有

共有 人打赏支持
t
粉丝 0
博文 15
码字总数 6644
作品 0
南开
私信 提问
【06】Effective Java - 枚举和注解

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

xixicat
2014/07/11
0
0
Effective Java 笔记(二)

泛型 NO.23 - NO.29 枚举和注解 枚举类型(Enumerated Type)很早就出现在编程语言中,它被用来将一组类似的值包含到一种类型当中。而这种枚举类型的名称则会被定义成独一无二的类型描述符,...

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

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

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

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

技术小牛
2014/05/10
0
0
java枚举的用法

转载:点击打开链接 enum 的全称为 enumeration, 是 JDK 1.5 中引入的新特性,存放在 java.lang 包中。 下面是我在使用 enum 过程中的一些经验和总结,主要包括如下内容: 1. 原始的接口定义...

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
一文搞懂TCP与UDP的区别

**摘要:**计算机网络基础 作者:浪里行舟 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可动态加载的认证模块

在Linux中执行有些程序时,这些程序在执行前首先要对启动它的用户进行认证,符合一定的要求之后才允许执行,例如login, su等。在Linux中进行身份或是状态的验证程序是由PAM来进行的,PAM(P...

城市之雾
28分钟前
1
0
程序员接私活那些坑

前言 最近有很多人问我私活怎么样?有什么坑,我之前也是接了几个私活,当然也有稳定的收入。我们也来分享一下。前几天发现了一个帖子很不错,我们来分享一下 注:本文转自 : http://blog.cs...

终端研发部
36分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部