枚举类型是指由一组固定的常量组合成合法值的类型。

背景需求

本次需求中,已经定了几个固定的常量值,每个常量值都有相同的行为,但是具体的实现细节不同。建议使用枚举抽象方法,好处:结构清晰,便于扩展。

枚举常量方法

最常见的星期一到星期日的常量,假设每天都需要打印不同的消息。

定义一个抽象方法,用于描述打印行为。

星期常量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 枚举抽象方法_Java枚举抽象方法实战相关推荐

  1. java enum 变量_java枚举使用详解

    package com.ljq.test; /** * 枚举用法详解 * * @author jiqinlin * */ public class TestEnum { /** * 普通枚举 * * ...

  2. java 枚举 注解_Java枚举类和注解梳理

    1. 枚举类 1. 枚举类的使用 枚举类的理解:类的对象只有有限个,确定的.我们称此类为枚举类. 当需要定义一组常量时,强烈建议使用枚举类. 如果枚举类中只有一个对象,则可以作为单例模式的实现方式. ...

  3. java获取枚举索引_Java枚举使用详解

    在实际编程中,往往存在着这样的"数据集",它们的数值在程序中是稳定的,而且"数据集"中的元素是有限的. 例如星期一到星期日七个数据元素组成了一周的"数 ...

  4. java 枚举 方法_Java枚举使用方法详解

    在实际编程中,往往存在着这样的"数据集",它们的数值在程序中是稳定的,而且"数据集"中的元素是有限的. 例如星期一到星期日七个数据元素组成了一周的"数 ...

  5. java枚举 数字_java 枚举

    Java中枚举的线程安全性及序列化问题 --枚举是如何保证线程安全的 要想看源码,首先得有一个类吧,那么枚举类型到底是什么类呢?是enum吗?答案很明显不是,enum就和class一样,只是一个关键字 ...

  6. java 枚举 大小_Java枚举入门

    枚举类(掌握) 枚举的诞生历史(了解) 在服装行业,衣服的分类根据性别可以表示为三种情况:男装.女装.中性服装. private ? type: public void setType(? type) ...

  7. java枚举类型转换_java枚举类型enum值与整数的转换

    java编程中偶尔会用到枚举,为了直观,我们通常将枚举值设置为形象的单词,方便理解和使用.枚举类型相当于数据库 中字典表,但是枚举只有字典表的值,缺少其他用来表示和值一一对应的字段,当我们在数据库中保 ...

  8. java枚举数字_Java枚举类型的使用,数值的二进制表示

    一.Java枚举类型的使用 首先请看这段代码: packagejava上课;public classEnumTest {public static voidmain(String[] args) { ...

  9. java枚举数字_Java 枚举 通过数字实例化枚举类型

    package com.zjl.domain.enumtype; /** * 枚举类 * * @Author zjl * @Date 2018/06/27 */ public enum EnumTyp ...

  10. java 枚举 接口_java枚举接口

    java中的枚举类 枚举类(enum),与class和interface关键字地位相同. 枚举类是一个特殊的类,可以有自己的成员变量.方法.构造器,可以实现一个或多个接口.一个java源文件中只能有一 ...

最新文章

  1. 智宇科技 ZYARJX-1机械臂智能小车 —— 手机端蓝牙控制程序
  2. Adobe Livecycle ES Workbench
  3. R 脚本读取汇总 Excel 表格数据
  4. 交换机的质量害死人呀!
  5. 狂神css3笔记,【CSS】CSS3学习笔记(一)——选择器
  6. Spring 系统学习:Spring的事务管理---事务回顾
  7. 赛锐信息:如何为SAP HANA部署选择理想的环境?
  8. 程序包OE_Order_PUB过程 Process_.Order 中出现错误ORA-20001
  9. mysql auto_inc_MySQL innodb_autoinc_lock_mode 详解
  10. 周星驰八级全国统一试卷
  11. Android 开发神器系列(工具篇)之 Android 屏幕共享工具
  12. ElasticJob简单使用
  13. android手机碎片管理,安卓手机如何进行系统碎片整理
  14. python绘制网格线_在主网格线下方绘制次要网格线
  15. 厨师 做菜 java_厨师做菜心得
  16. 电商后台:商品管理系统
  17. 《令人心动的offer(第二季)》学习笔记
  18. 优信二手车业务规模大幅增长 业绩亮眼
  19. 为2017年出生的孩子免费取名字,孩子起名要注意的问题
  20. 三星笔记本U盘重装win10系统教程

热门文章

  1. 路由器+摄像头:Netgear在国内怎么走?
  2. 使用OKHttp3实现下载(断点续传、显示进度)
  3. tomcat端口占用后的解决办法
  4. 【转】职场三国杀:为什么职场争斗中认真干活的人有时会败给不干活的人
  5. 如何下载github项目中的某一部分
  6. 题解 DTOJ #1438. 矮人排队(lineup)
  7. 表迁移工具的选型-复制ibd的方法-传输表空间
  8. 远程桌面与本地桌面实现文件传输
  9. linux下su和su - 的区别
  10. 2017 04 04 省选模拟