Java枚举抽象方法实战
2017-08-01 23:43
423 查看
枚举类型是指由一组固定的常量组合成合法值的类型。
定义一个抽象方法,用于描述打印行为。
星期常量Override抽象方法,实现具体的打印细节。
代码演示如下:
代码中的访问修饰符可根据需要修改。上述代码仅用于演示。该代码对外封装细节,仅提供了打印方法,使用此方法需要知道枚举常量对应的key值。如果知道枚举值,可直接调用打印方法。
项目中会遇到这样的问题,页面上需要展示枚举变量对应的含义,这时有2中做法:
1. 页面根据不同枚举变量解析对应的含义;
2. 枚举变量在定义的时候,把key 定义为对应的含义。
下面模拟枚举变量在前后端交互过程中的做法。
结果:
java enum(枚举)使用详解 + 总结
背景需求
本次需求中,已经定了几个固定的常量值,每个常量值都有相同的行为,但是具体的实现细节不同。建议使用枚举抽象方法,好处:结构清晰,便于扩展。枚举常量方法
最常见的星期一到星期日的常量,假设每天都需要打印不同的消息。定义一个抽象方法,用于描述打印行为。
星期常量Override抽象方法,实现具体的打印细节。
代码演示如下:
public class EnumAbstract { //对外提供方法 public void print(int key) { keyOf(key).print(); } public void print(WorkDays workDays){ workDays.print(); } //获取Key对应的实例 private WorkDays keyOf(int key) { switch (key) { case 1: return WorkDays.MONDAY; case 2: return WorkDays.TUESDAY; case 3: return WorkDays.WEDNESDAY; case 4: return WorkDays.THURSDAY; case 5: return WorkDays.FRIDAY; case 6: return WorkDays.SUNDAY; case 7: return WorkDays.SATURDAY; default: return null; } } //最小访问权限设计原则,根据需要设置访问权限 private enum WorkDays { MONDAY(1) { @Override protected void print() { System.out.println(getKey()+" : 消息1"); } }, TUESDAY(2) { @Override protected void print() { System.out.println(getKey()+" : 消息2"); } }, WEDNESDAY(3) { @Override protected void print() { System.out.println(getKey()+": 消息3"); } }, THURSDAY(4) { @Override protected void print() { System.out.println(getKey()+" : 消息4"); } }, FRIDAY(5) { @Override protected void print() { System.out.println(getKey()+" : 消息5"); } }, SATURDAY(6) { @Override protected void print() { System.out.println(getKey()+" : 消息6"); } }, SUNDAY(7) { @Override protected void print() { System.out.println(getKey()+" : 消息7"); } }; private int key; //私有化构造方法 private WorkDays(int key) { this.key = key; } public int getKey() { return key; } public void setKey(int key) { this.key = key; } //抽象方法 protected abstract void print(); } }
代码中的访问修饰符可根据需要修改。上述代码仅用于演示。该代码对外封装细节,仅提供了打印方法,使用此方法需要知道枚举常量对应的key值。如果知道枚举值,可直接调用打印方法。
workDays.print();
实战
下面模拟实战中的使用场景,遇到了一个难题,顺便记录一下。项目中会遇到这样的问题,页面上需要展示枚举变量对应的含义,这时有2中做法:
1. 页面根据不同枚举变量解析对应的含义;
2. 枚举变量在定义的时候,把key 定义为对应的含义。
public enum WorkDaysName { MONDAY("星期一"), TUESDAY("星期二"), WEDNESDAY("星期三"), THURSDAY("星期四"), FRIDAY("星期五"), SATURDAY("星期六"), SUNDAY("星期日"); private String name; WorkDaysName(String name) { this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
下面模拟枚举变量在前后端交互过程中的做法。
//模拟保存枚举到数据库 public static void testSave() { String key = EnumAbstract.WorkDaysName.SUNDAY.name(); //保存枚举实例对应的name到数据库 System.out.println("保存枚举实例对应的name到数据库 " + key); } //模拟从数据库获取 public static void testSelect() { //模拟从数据库获取 EnumAbstract.WorkDaysName workDays = EnumAbstract.WorkDaysName.valueOf("SUNDAY"); System.out.println("模拟从数据库获取对应的枚举实例 " + workDays); System.out.println("模拟从数据库获取对应的枚举实例的类型 " + workDays.getClass()); System.out.println("页面直接展示:" + workDays + " 的name:" + workDays.getName()); }
结果:
保存枚举实例对应的name到数据库: SUNDAY 模拟从数据库获取对应的枚举实例: SUNDAY 模拟从数据库获取对应的枚举实例的类型: class org.wuxinshui.boosters.designPatterns.enumAbstract.EnumAbstract$WorkDaysName 页面直接展示:SUNDAY 的name:星期日
扩展
Java 枚举7常见种用法java enum(枚举)使用详解 + 总结
相关文章推荐
- Java枚举抽象方法实战
- JAVA进阶之旅(一)——增强for循环,基本数据类型的自动拆箱与装箱,享元设计模式,枚举的概述,枚举的应用,枚举的构造方法,枚举的抽象方法
- java 枚举-抽象方法结合使用
- JAVA进阶之旅(一)——增强for循环,基本数据类型的自动拆箱与装箱,享元设计模式,枚举的概述,枚举的应用,枚举的构造方法,枚举的抽象方法
- 14. JAVA 枚举(Enum、类集EnumMap&EnumSet 、实现接口、定义抽象方法) ----- 学习笔记
- 【java基础增强】带抽象方法的枚举
- java基础加强--实现带有抽象方法的枚举
- (十六)Core Java 枚举的使用(基本介绍,构造方法枚举,抽象方法枚举) (113)
- java_包含抽象方法的枚举类
- java设计模式-创建模式之 简单工厂,工厂方法和抽象工厂的区别总结
- 带抽象方法的枚举
- Java中abstract抽象类 / abstract抽象方法 和C++的对比
- JAVA 抽象类 抽象方法 接口
- 黑马程序员——java第七天:面向对象(继承、子父类之变量、final、抽象、模板方法、接口)
- 22-带抽象方法的枚举
- 抽象方法的枚举
- Java枚举七种常用方法
- Java枚举应用方法
- 谈《Java中抽象类,抽象方法,重载和覆盖》
- 带抽象方法的枚举