第六章:枚举和注解。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(double x , double y ) {return x + y ;}
 7     },
 8     MINUS("-"){
 9         public double apply(double x , double y ) {return x - y ;}
10     },
11     TIMES("*"){
12         public double apply(double x , double y ) {return x * y ;}
13     },
14     DIVIDE("/"){
15         public double apply(double x , double y ) {return x / y ;}
16     } ;
17
18     private final String symbol ;
19
20     BaseOperation(String symbol) {
21         this.symbol = symbol ;
22     }
23 }
 1 package com.twoslow.cha6;
 2
 3 public enum ExtendedOperation implements OperationInterface{
 4
 5     EXP("^") {
 6         public double apply(double x, double y){return Math.pow(x, y) ;};
 7     } ,
 8
 9     REMAINDER("%") {
10         public double apply(double x , double y ) {return x % y ;} ;
11     } ;
12
13
14     private final String symbol ;
15
16     ExtendedOperation(String symbol) {
17         this.symbol = symbol ;
18     }
19 }
 1 package com.twoslow.cha6;
 2
 3 import java.util.Arrays;
 4 import java.util.Collection;
 5
 6 public class MainTest {
 7
 8     public static void main(String[] args) {
 9 //        test(ExtendedOperation.class , 3,2) ;
10
11         test2(Arrays.asList(BaseOperation.values()),3,2) ;
12     }
13
14     //泛型声明确保对象既表示枚举又表示Operation的子类型
15     private static <T extends Enum<T> & OperationInterface> void test(Class<T> opSet , double x , double y ) {
16         for(OperationInterface op : opSet.getEnumConstants()) {
17             System.out.println(op.apply(x, y));
18         }
19     }
20
21     private static  void test2(Collection<? extends OperationInterface> opSet , double x , double y ) {
22         for(OperationInterface op : opSet) {
23             System.out.println(op.apply(x, y));
24         }
25     }
26 }
时间: 2024-11-09 21:43:31

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

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

枚举类型是不可扩展的,但是接口类型是可扩展的.使用接口,可以模拟可伸缩的枚举. 如一个简单的计算器: 实现接口Operation,里面只有一个apply方法. public interface Operation { double apply(double x, double y); } 基本的运算: public enum BasicOperation implements Operation { PLUS("+") { public double apply(double x, d

SpringBoot | 第六章:常用注解介绍及简单使用

前言 之前几个章节,大部分都是算介绍springboot的一些外围配置,比如日志 配置等.这章节开始,开始总结一些关于springboot的综合开发的知识点.由于SpringBoot本身是基于Spring和SpringMvc等各类spring家族的一个解决方案,可快速进行集合.故相关知识点其实大部分都是基于spring或者springmvc既有的知识点的.本章节,主要讲解的是关于web开发及springboot独有的一些常用注解进行说明. 常用注解 总结 最后 老生常谈 常用注解 @Spring

[Effective Java]第六章 枚举和注解

第六章      枚举和注解 30.      用enum代替int常量 枚举类型是指由一组固定的常量组成合法值的类型,例如一年中的季节或一副牌中的花色.在没引入枚举时,一般是声明一组int常量,每个类型成员一个常量: public static final int APPLE_FUJI = 0; public static final int APPLE_PIPPIN = 1; public static final int APPLE_GRANNY_SMITH = 2; public sta

《Effective Java》第6章 枚举和注解

第30条:用enum代替int常量 将加班工资计算移到一个私有的嵌套枚举中,将这个策略枚举(strategy enum)的实例传到PayrollDay枚举的构造器中.之后PayrollDay枚举将加班工资计算委托给策略枚举: 以上,方法overtimePay()在每个枚举类示例中实现,对外提供一致的pay()方法. 第31条:用实例域代替序数 永远不要根据枚举的序数导出与它关联的值.而是要将它保存在一个实例域中: 第33条:用EnumMap代替序数索引 现在假设有一个香草的数组.表示一座花园中的

Effective java经验之谈,枚举,注解,方法,通用设计,异常

这几章看的比较快,内容就如同标题一样比较容易理解,所以只有部分内容会在[]中解释,其他的就直接理解标题,并不影响阅读质量. 不过如果时间充足的话,还是仔细读一读原书的内容,相信还是有所收获的.主要最近自己想进入算法与机器学习部分,尽快结束这本书. 另一方面,讨论一些自己感兴趣的内容,我会将搞过的东西总结下.后面可能写一部分关于java字节码阅读以及编写的东西.只所以这么来, 是因为字节码编程还是非常用途实际的,这一"java编译语言"使得String与StringBuilder的性能对

Effective Java 读书笔记之五 枚举和注解

Java1.5中引入了两个新的应用类型家族,新的类为枚举类型,新的接口为注解类型. 一.用enum代替int常量 1.枚举值由一组固定的常量组成合法值的类型. 二.用实例域代替序数 1.不要根据枚举的序数导出它关联的值,而是把它保存在一个实例域中. 三.用EnumSet代替位域模式 1.如果有枚举类型需要用在集合中,EnumSet就是最好的工具. 四.用EnumMap代替序数索引功能 1.EnumMap更加安全和可靠. 五.用接口模拟实现可伸缩的枚举 1.可伸缩的枚举类型,一般不是一个好主意.

Welcome to Swift (苹果官方Swift文档初译与注解三十七)---261~265页(第六章-- 闭包)

Inferring Type From Context 上下文类型判断 因为排序的闭包是作为一个参数传递给函数,因此Swift可以判定这个参数的类型和根据sort函数第二个参数判断返回值的类型.这个参数的类型是(String, String) -> Bool,这意味着 String,String以及Bool类型都不需要在闭包定义的时候声明.因为所有的类型都可以由系统判定.因此,返回箭头以及参数名字的括号都可以省略: reversed = sort(names, { s1, s2 in retur

第三章之枚举、注解

2019-01-22 内容:枚举.注解 一.自定义一个枚举类 1 public class TestSeason { 2 3 public static void main(String[] args) { 4 Season spring = Season.Spring; 5 System.out.println(spring); 6 } 7 } 8 public class Season { 9 //将属性定义为私有常量 10 private final String seasonName;

[Effective Java 读书笔记] 第6章 枚举和注解

第三十条 用enum代替int 总得来说,使用enum有几点好处 1.编译时的类型安全, 2.可以保证就是自己定义的值,不会有月结风险, 3.每个枚举类型有自己的命名空间 4.枚举可以添加任意的方法和域 5.枚举类型是final的无法实例化,也就是实例可控的.. 第三十一条 用实例域替代序数 即不要依赖枚举值得定义顺序来指定他们的值,而应该讲枚举保存在一个实例域中,类似厦门的value值: public enum RewardType { RMB(1), OBJECT(2), ZAN(3), O