effect java 学习摘要(5) - 枚举和注解
2017-08-08 22:56
996 查看
enum枚举类型代替int常量
枚举enum示例 :public enum Apple{ FUJI(1), PIPPIN(2), GRANNY_SMITH(3); private int category; Apple(int category) { this.category = category; } } public enum Orange{NAVEL, TEMPLE, BLOOD}
枚举本质上是int值
枚举类型为类型安全的枚举模式
策略枚举 : 利用抽象方法, 避免switch过于复杂,冗余
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 hoursWorked, double payRate) { return payType.pay(hoursWorked, payRate); } private enum PayType { WEEKDAY { @Override double overtimePay(double hours, double payRate) { return hours <= HOURS_PER_SHIT ? 0 : (hours - HOURS_PER_SHIT) * payRate / 2; } }, WEEKEND { @Override double overtimePay(double hours, double payRate) { return hours * payRate / 2; } }; private static final int HOURS_PER_SHIT = 8; abstract double overtimePay(double hours, double payRate); double pay(double hoursWorked, double payRate) { double basePay = hoursWorked + payRate; return basePay + overtimePay(hoursWorked, payRate); } } }
用实例代替序数
``` public enum Apple{ FUJI(1), PIPPIN(2), GRANNY_SMITH(3); private int category; Apple(int category) { this.category = category; } } ```
用EnumSet替代位域
``` public static class Text { public static final int STYLE_BOLD = 1 << 0; public static final int STYLE_ITALIC = 1 << 1; public enum Style {BOLD ,ITALIC;} } ```
use an EnumMap to associate data with an enum
``` public class Herb { public enum Type {ANNUAL, PERENNIAL, BIENNIAL} final String name; final Type type; public Herb(String name, Type type) { this.name = name; this.type = type; } @Override public String toString() { return name; } } public void associate() { Map<Herb.Type , Set<Herb>> hrebsByType = new EnumMap<Herb.Type, Set<Herb>>(Herb.Type.class); for (Herb.Type t : Herb.Type.values()) { hrebsByType.put(t, new HashSet<Herb>()); } for (Herb h : garden) { hrebsByType.get(h.type).add(h); } } ```
用接口模拟可伸缩的枚举
虽然无法编写可扩展的枚举类型, 却可以通过编写接口以及实现该接口的基础枚举类型注解
通过Retention和Target注解进行注解, 被称为元注解(meta-annotation)@Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface Test { }
相关文章推荐
- effect java 学习摘要(8) - 并发
- 《编写高质量代码改善Java程序的151个建议》学习笔记 第6章 枚举和注解
- effect java 学习摘要(6) - 方法
- effect java 学习摘要(9) - 序列化
- effect java 学习摘要(2) - object通用的方法
- effect java 学习摘要(4) - 泛型
- Java基础学习笔记之枚举与注解
- effect java 学习摘要(1) - 创建和销毁对象
- effect java 学习摘要(3) - 类和接口
- Java编程思想学习笔记——枚举、注解
- effect java 学习摘要(7) - 通用程序设计 和 异常
- java笔记1(策略、代理模式、枚举、反射、注解)
- 黑马程序员_java学习日记_Java高新技术_枚举
- Java 学习笔记05:Spring 基于注解(Annotation)的IOC
- Annotation & Enum :Java中注解和枚举的使用
- java枚举学习总结
- java 枚举学习--从小程序中学习
- 黑马程序员_java jdk5.0新特性和枚举的学习笔记
- 黑马程序员_王康 java反射,枚举,注解
- J2SE学习笔记3 — Java基本语法(9)数组和枚举