effective java中枚举的几种用法
来源:互联网 发布:淘宝客服的感想 编辑:程序博客网 时间:2024/06/03 06:43
构造器和枚举实例通用方法的使用:
public enum Planet { PLANET1 (1,2), PLANET2 (2,3), PLANET3 (3,4); private final int mass; private final int radius; private final int surfaceWeight; Planet(int mass, int radius) { this.mass = mass; this.radius = radius; this.surfaceWeight = mass * radius; } public double getSurfaceWeight() { return surfaceWeight; }}枚举天生不可变,因此所有域都必须为final,而java中final域若在申明时不初始化,则必须在构造器中初始化。因此构造器中必须对所有域初始化,否则编译器将报错。
所有枚举都有一个静态的values方法按照声明顺序返回它的值数组。
若枚举中的每个实体都需要与一种特定的行为相关联,则可以在枚举类型中声明一个抽象的apply方法,这种方法被称作特定于常量的方法实现(constant-specific method implementation) :
public enum Operation { PLUS { double apply(double x, double y) { return x + y; } }, MINUS { double apply(double x, double y) { return x - y; } }; abstract double apply(double x, double y);}
//实现fromString方法 private static final Map<String, Operation> stringToEnum = new HashMap<String, Operation>(); static { for (Operation op : values()) { stringToEnum.put(op.toString(), op); } } public static Operation fromString(String symbol) { return stringToEnum.get(symbol); }
枚举可以和策略模式很好地配合,使用一个枚举类表示一个策略集合,每个枚举实例代表一个具体策略:
public enum PayType { //枚举数据的定义必须放在最上端 WEEKDAY{ double overtimePay(double hrs, double payRate){ return hrs < HOURS_PER_SHIFT ? 0 : (hrs - HOURS_PER_SHIFT) * payRate/2; } }, WEEKEND{ double overtimePay(double hrs,double payRate){ return hrs * payRate / 2; } }; private static final int HOURS_PER_SHIFT = 8; abstract double overtimePay(double hrs, double payRate); double pay(double hoursWorked, double payRate) { double basePay = hoursWorked * payRate; return basePay + overtimePay(hoursWorked, payRate); }}
PayType为策略类,其中WEEKDAY和WEEKEND为两种具体策略,特定于常量的方法和通用方法的结合使用
public enum PayrollDay { MONDAY(PayType.WEEKDAY), TUESDAY(PayType.WEEKDAY), WEDNESDAY(PayType.WEEKDAY), THURSDAY(PayType.WEEKDAY), FRIDAY(PayType.WEEKDAY), SATURDAY(PayType.WEEKEND), SUNDAY(PayType.WEEKEND); private final PayType paytype; PayrollDay(PayType payType) { this.paytype = payType; } double pay(double workedHours, double payRate) { return paytype.pay(workedHours, payRate); }}
- effective java中枚举的几种用法
- java枚举的几种用法
- java中的枚举的几种用法
- java 枚举(Enum)的几种用法
- Java中枚举的7种用法
- java中枚举的用法
- java中枚举的用法
- Effective Java--枚举类型的
- java 中super 的几种用法
- Java中for的几种用法
- JAVA中定时器的几种用法
- Java中super的几种用法
- JAVA中enum的几种用法
- 枚举的几大用法
- Java中关于枚举的7种用法
- java 中枚举类型的用法
- java中枚举类型Enum的用法
- java中常见的枚举用法
- UVa 846 Steps
- ls
- uva 11235
- SQL多表连接查询(详细实例)
- HDU 递推求解专题练习 2045 2046 2047 2048 2049 2050
- effective java中枚举的几种用法
- FFmpeg编译出错undefined reference to `img_convert’的解决方法
- OCP-1Z0-053-V12.02-236题
- 黑马程序员---Java基础学习笔记(多线程-前篇)
- UVA 218 - Moth Eradication 计算几何 凸包
- 给你写的launchpad430--TIMER--系列2
- 目标检测(Object Detection)原理与实现(三)
- jquery 缓存问题
- Android中“Connection to https://dl-ssl.google.com refused”问题