Effective Java~38. 用接口模拟可扩展的enum
使用枚举类型有一个很好的方法来实现这种效果。基本思想是利用枚举类型可以通过为 opcode 类型定义一个接口,并实现任意接口。
// Emulated extensible enum using an interface
public interface Operation {double apply(double x, double y);
}
public enum BasicOperation implements Operation {PLUS("+") {public double apply(double x, double y) { return x + y; }},MINUS("-") {public double apply(double x, double y) { return x - y; }},TIMES("*") {public double apply(double x, double y) { return x * y; }},DIVIDE("/") {public double apply(double x, double y) { return x / y; }};private final String symbol;BasicOperation(String symbol) {this.symbol = symbol;}@Override public String toString() {return symbol;}
}
虽然枚举类型( BasicOperation )不可扩展,但接口类型( Operation )是可以扩展的,并且它是用于表示 API 中的操作的接口类型。 你可以定义另一个实现此接口的枚举类型,并使用此新类型的实例来代替基本类型。
// Emulated extension enum
public enum ExtendedOperation implements Operation {EXP("^") {public double apply(double x, double y) {return Math.pow(x, y);}},REMAINDER("%") {public double apply(double x, double y) {return x % y;}};private final String symbol;ExtendedOperation(String symbol) {this.symbol = symbol;}@Override public String toString() {return symbol;}
}
Effective Java~38. 用接口模拟可扩展的enum相关推荐
- Effective Java之用接口模拟可伸缩的枚举(三十四)
在实际工作中,我们常常会遇到这样的情况: 如果我在一个枚举类型封装在一个jar库里后,其他开发人员如果对该枚举进行扩展? 毕竟我刚开始定义的枚举并不是会涵盖所有的可能! public enum Mod ...
- 【04】Effective Java - 类和接口
为什么80%的码农都做不了架构师?>>> 1.使类和成员的可访问性最小化 封装是软件设计的基本原则之一,它的好处就是解除组成系统的各个模块之间的耦合关系,使得这些模块可以独立地 ...
- Effective Java 类和接口 第17条:要么为继承而设计,并提供文档说明,要么就禁止继承
第16条提醒我们,对于不是为了继承而设计,并且没有文档说明的"外来"类进行子类化是多么危险.那么对于专门为了继承而设计并具有良好文档说明的类而言,这有意味着什么呢? 该类的文档必须 ...
- Effective Java之通过接口引用对象(五十二)
List< ? > list= new ArrayList< ? > Map< ?,? > map = new HashMap< ?,? > 这样使用接 ...
- Effective Java(第3版) 90条经验法则
目录 第2章 创建和销毁对象 第1条:用静态工厂方法替代构造器 第2条:遇到多个构造器参数时要考虑使用构建器 例子 使用 第3条:用私有构造器或者枚举类型强化Singleton属性 例子 使用 第4条 ...
- 5天带你读完《Effective Java》(三)
<Effective Java>是Java开发领域无可争议的经典之作,连Java之父James Gosling都说: "如果说我需要一本Java编程的书,那就是它了". ...
- 《Effective Java》真的是一本值得一直去钻研的好书
文章目录 <Effective Java>读书笔记 第一章 引言 第二章 创建和销毁对象 1 考虑使用静态工厂方法替代构造方法** 2 当构造方法参数过多时使用builder(建造者) 模 ...
- 《Effective Java》中文版第3版 读书笔记
评论中有电子档资源哦 ^_^ 第1章引言 第2章创建和销毁对象 第1条:用静态工厂方法代替构造器 静态工厂方法与构造器不同的第一大优势在于,它们有名称. 静态工厂方法与构造器不同的第二大优势在于, ...
- Effective Java(第三版) 学习笔记 - 第四章 类和接口 Rule20~Rule25
Effective Java(第三版) 学习笔记 - 第四章 类和接口 Rule20~Rule25 目录 Rule20 接口优于抽象类 Rule21 为后代设计接口 Rule22 接口只用于定义类型 ...
最新文章
- 厦门大学计算机科学每年的保研率是多少,厦大保研率大曝光,高达30%!研厦党该何去何从?...
- 树莓派默认密码_用树莓派搭建私人简易网盘 2/5 树莓派4B初始设置
- 网络传输为什么要序列化_企业为什么要选择网络营销外包
- JAVA面试常考系列一
- 将一段复杂文本变成字符串的赋值语句
- liunx-mysql-password重置(初始化)
- rabbitmq3.7.3 发布了一个新的 exchange x-random
- Silverlight查询大数据出错?使用服务器端分页控件DomainDataSource
- 【Https】Spring RestTemplete支持Https安全请求
- 如何减少电脑对眼睛视力的影响
- 开源表单系统|Tduck填鸭表单docker部署详细教程
- android 支付宝接口开发,android 实现支付宝wap接口编程
- 安卓手机虚拟键盘和position:fixed问题
- 5分钟搭建3D场景 3D可视化搭建平台WebGLHTML5
- activity已经销毁判断
- 自媒体必备工具合集分享
- 【BZOJ4094】 【Usaco2013 Dec】Optimal Milking(权限题)
- 人工智能正通过这9种方式重塑人力资源行业
- 无线通信技术学习笔记——概述
- 【移动网络】Ch. 2 移动网络基本原理 (Part1. 无线信道与数据率)
热门文章
- 论文浅尝 - WWW2020 | 生成多跳推理问题以改善机器阅读理解能力
- 腾讯2013实习生笔试题+答案1-5aadaa 6-10adbcc 11-15 acacc16-20 bbddc
- 基于对抗生成网络的滚动轴承故障检测方法
- 秒懂系列 | 史上最简单的Python Django入门教程
- c++: internal compiler error: Killed
- MyEclipse配置Tomcat 6
- 一个简单的parser
- jQuery之防止【冒泡事件】,阻止默认行为 【return false】 event.stopPropagation event.preventDefault...
- 用javascript生成指定范围的随机数
- 2.2.2.进程调度的时机切换与过程、方式