第34条:用接口模拟可伸缩的枚举

枚举类型是不可扩展的,但是接口类型是可扩展的。使用接口,可以模拟可伸缩的枚举。

如一个简单的计算器:

实现接口Operation,里面只有一个apply方法。

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;
    }
    public String toString() {
        return symbol;
    }

}

扩展该计算器:

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;
    private ExtendedOperation(String symbol) {
        this.symbol = symbol;
    }
    public String toString() {
        return symbol;
    }
}

使用:

public class Main {

    private static <T extends Enum<T> & Operation> void test(Class<T> opSet, double x, double y) {

        for(Operation op : opSet.getEnumConstants())
            System.out.printf("%f %s %f = %f%n", x, op, y, op.apply(x, y));
    }

    public static void main(String[] args) {
        double x = 2.0;
        double y = 4.0;
        test(ExtendedOperation.class, x, y);
    }

}

接口模拟可伸缩枚举的不足:无法实现从一个枚举继承到另一个枚举,所以有些公共的功能是在每个枚举类中重复的。如果公共的功能比较多,将它封装到一个辅助类或静态辅助方法中,来避免代码的复制工作。

时间: 2024-10-06 13:03:22

第34条:用接口模拟可伸缩的枚举的相关文章

第六章:枚举和注解。ITEM34:用接口模拟可伸缩的枚举。

1 package com.twoslow.cha6; 2 3 public interface OperationInterface { 4 5 double apply(double x , double y) ; 6 } 1 package com.twoslow.cha6; 2 3 public enum BaseOperation implements OperationInterface{ 4 5 PLUS("+"){ 6 public double apply(doubl

Effective Java 第三版——38. 使用接口模拟可扩展的枚举

Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将近8年的时间,但随着Java 6,7,8,甚至9的发布,Java语言发生了深刻的变化. 在这里第一时间翻译成中文版.供大家学习分享之用. 38. 使用接口模拟可扩展的枚举 在几乎所有方面,枚举类型都优于本书第一版中描述的类型安全模式[Bloch01]. 从表面上看,一个例外涉及可扩展性,这在原始模式下是可能的

《Effective C++》之条款34:区分接口继承和实现继承

<Effective C++> 条款34:区分接口继承和实现继承 Public继承由两部分组成 函数接口继承 函数实现继承 三种可能面对的继承 derived class 只继承成员函数的接口 derived class 同时继承函数的接口和实现,但又希望能够覆写它们所继承的实现 derived class 同时继承函数的接口和实现,但不允许覆写任何东西 总结: 接口继承和实现继承不同.在public继承下,derived classes 总是继承base class 的接口. Pure vi

雅虎34条军规

官方原地址:http://developer.yahoo.com/performance/rules.htmlmooc:视频教程另附 SAE CDN:http://lib.sinaapp.com/ 雅虎团队经验:网站页面性能优化的34条黄金守则 1.尽量减少HTTP请求次数      终端用户响应的时间中,有80%用于下载各项内容.这部分时间包括下载页面中的图像.样式表.脚本.Flash等.通过减少页面中的元素可以减少HTTP请求的次数.这是提高网页速度的关键步骤.      减少页面组件的方法

Yahoo!网站性能最佳体验的34条黄金守则

Yahoo!的Exceptional Performance团队为改善Web性能带来最佳实践.他们为此进行了一系列的实验.开发了各种工具.写了大量的文章和博客并在各种会议上参与探讨.最佳实践的核心就是旨在提高网站性能. Excetional Performance团队总结出了一系列可以提高网站速度的方法.可以分为7大类34条.包括内容.服务器.cookie.CSS.Javascrīpt.图片.移动应用等七部分. 其中内容部分一共十条建议: 一.内容部分 尽量减少HTTP请求 减少DNS查找 避免

雅虎网站优化34条法则

雅虎给出了优化网站加载速度的34条法则(包括Yslow规则22条) 详细说明,下载转发 ponytail 的译文(来自帕兰映像). 1.Minimize HTTP Requests 减少HTTP请求 图片.css.script.flash等等这些都会增加http请求数,减少这些元素的数量就能减少响应时间.把多个JS.CSS在可能的情况下写进一个文件,页面里直接写入图片也是不好的做法,应该写进CSS里,利用 CSS sprites 将小图拼合后利用background来定位. 2.Use a Co

雅虎网站页面性能优化的34条黄金守则(转)

雅虎团队经验:网站页面性能优化的34条黄金守则1.尽量减少HTTP请求次数      终端用户响应的时间中,有80%用于下载各项内容.这部分时间包括下载页面中的图像.样式表.脚本.Flash等.通过减少页面中的元素可以减少HTTP请求的次数.这是提高网页速度的关键步骤.      减少页面组件的方法其实就是简化页面设计.那么有没有一种方法既能保持页面内容的丰富性又能达到加快响应时间的目的呢?这里有几条减少HTTP请求次数同时又可能保持页面内容丰富的技术. 合并文件是通过把所有的脚本放到一个文件中

雅虎网站页面性能优化的34条黄金守则

雅虎团队经验:网站页面性能优化的34条黄金守则 1.尽量减少HTTP请求次数      终端用户响应的时间中,有80%用于下载各项内容.这部分时间包括下载页面中的图像.样式表.脚本.Flash等.通过减少页面中的元素可以减少HTTP请求的次数.这是提高网页速度的关键步骤.      减少页面组件的方法其实就是简化页面设计.那么有没有一种方法既能保持页面内容的丰富性又能达到加快响应时间的目的呢?这里有几条减少HTTP请求次数同时又可能保持页面内容丰富的技术. 合并文件是通过把所有的脚本放到一个文件

提高网站访问速度的34条军规

•Google告诉你如何让你的网站访问更快 •提高网站访问速度的34条军规(4-6) •提高网站访问速度的34条军规(11-13) •提高网站访问速度的34条军规(20-25) •提高网站访问速度的34条军规(31-34) •提高网站访问速度的34条军规(14-17) •提高网站访问速度的34条军规(7-10) •提高网站访问速度的34条军规(18-19) •提高网站访问速度的34条军规(26-30)