使用枚举类型有一个很好的方法来实现这种效果。基本思想是利用枚举类型可以通过为 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相关推荐

  1. Effective Java之用接口模拟可伸缩的枚举(三十四)

    在实际工作中,我们常常会遇到这样的情况: 如果我在一个枚举类型封装在一个jar库里后,其他开发人员如果对该枚举进行扩展? 毕竟我刚开始定义的枚举并不是会涵盖所有的可能! public enum Mod ...

  2. 【04】Effective Java - 类和接口

    为什么80%的码农都做不了架构师?>>>    1.使类和成员的可访问性最小化 封装是软件设计的基本原则之一,它的好处就是解除组成系统的各个模块之间的耦合关系,使得这些模块可以独立地 ...

  3. Effective Java 类和接口 第17条:要么为继承而设计,并提供文档说明,要么就禁止继承

    第16条提醒我们,对于不是为了继承而设计,并且没有文档说明的"外来"类进行子类化是多么危险.那么对于专门为了继承而设计并具有良好文档说明的类而言,这有意味着什么呢? 该类的文档必须 ...

  4. Effective Java之通过接口引用对象(五十二)

    List< ? > list= new ArrayList< ? > Map< ?,? > map = new HashMap< ?,? > 这样使用接 ...

  5. Effective Java(第3版) 90条经验法则

    目录 第2章 创建和销毁对象 第1条:用静态工厂方法替代构造器 第2条:遇到多个构造器参数时要考虑使用构建器 例子 使用 第3条:用私有构造器或者枚举类型强化Singleton属性 例子 使用 第4条 ...

  6. 5天带你读完《Effective Java》(三)

    <Effective Java>是Java开发领域无可争议的经典之作,连Java之父James Gosling都说: "如果说我需要一本Java编程的书,那就是它了". ...

  7. 《Effective Java》真的是一本值得一直去钻研的好书

    文章目录 <Effective Java>读书笔记 第一章 引言 第二章 创建和销毁对象 1 考虑使用静态工厂方法替代构造方法** 2 当构造方法参数过多时使用builder(建造者) 模 ...

  8. 《Effective Java》中文版第3版 读书笔记

    评论中有电子档资源哦  ^_^ 第1章引言 第2章创建和销毁对象 第1条:用静态工厂方法代替构造器 静态工厂方法与构造器不同的第一大优势在于,它们有名称.  静态工厂方法与构造器不同的第二大优势在于, ...

  9. Effective Java(第三版) 学习笔记 - 第四章 类和接口 Rule20~Rule25

    Effective Java(第三版) 学习笔记 - 第四章 类和接口 Rule20~Rule25 目录 Rule20 接口优于抽象类 Rule21 为后代设计接口 Rule22 接口只用于定义类型 ...

最新文章

  1. 厦门大学计算机科学每年的保研率是多少,厦大保研率大曝光,高达30%!研厦党该何去何从?...
  2. 树莓派默认密码_用树莓派搭建私人简易网盘 2/5 树莓派4B初始设置
  3. 网络传输为什么要序列化_企业为什么要选择网络营销外包
  4. JAVA面试常考系列一
  5. 将一段复杂文本变成字符串的赋值语句
  6. liunx-mysql-password重置(初始化)
  7. rabbitmq3.7.3 发布了一个新的 exchange x-random
  8. Silverlight查询大数据出错?使用服务器端分页控件DomainDataSource
  9. 【Https】Spring RestTemplete支持Https安全请求
  10. 如何减少电脑对眼睛视力的影响
  11. 开源表单系统|Tduck填鸭表单docker部署详细教程
  12. android 支付宝接口开发,android 实现支付宝wap接口编程
  13. 安卓手机虚拟键盘和position:fixed问题
  14. 5分钟搭建3D场景 3D可视化搭建平台WebGLHTML5
  15. activity已经销毁判断
  16. 自媒体必备工具合集分享
  17. 【BZOJ4094】 【Usaco2013 Dec】Optimal Milking(权限题)
  18. 人工智能正通过这9种方式重塑人力资源行业
  19. 无线通信技术学习笔记——概述
  20. 【移动网络】Ch. 2 移动网络基本原理 (Part1. 无线信道与数据率)

热门文章

  1. 论文浅尝 - WWW2020 | 生成多跳推理问题以改善机器阅读理解能力
  2. 腾讯2013实习生笔试题+答案1-5aadaa 6-10adbcc 11-15 acacc16-20 bbddc
  3. 基于对抗生成网络的滚动轴承故障检测方法
  4. 秒懂系列 | 史上最简单的Python Django入门教程
  5. c++: internal compiler error: Killed
  6. MyEclipse配置Tomcat 6
  7. 一个简单的parser
  8. jQuery之防止【冒泡事件】,阻止默认行为 【return false】 event.stopPropagation event.preventDefault...
  9. 用javascript生成指定范围的随机数
  10. 2.2.2.进程调度的时机切换与过程、方式