java 枚举抽象方法_Java枚举抽象方法实战
枚举类型是指由一组固定的常量组合成合法值的类型。
背景需求
本次需求中,已经定了几个固定的常量值,每个常量值都有相同的行为,但是具体的实现细节不同。建议使用枚举抽象方法,好处:结构清晰,便于扩展。
枚举常量方法
最常见的星期一到星期日的常量,假设每天都需要打印不同的消息。
定义一个抽象方法,用于描述打印行为。
星期常量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枚举抽象方法实战相关推荐
- java enum 变量_java枚举使用详解
package com.ljq.test; /** * 枚举用法详解 * * @author jiqinlin * */ public class TestEnum { /** * 普通枚举 * * ...
- java 枚举 注解_Java枚举类和注解梳理
1. 枚举类 1. 枚举类的使用 枚举类的理解:类的对象只有有限个,确定的.我们称此类为枚举类. 当需要定义一组常量时,强烈建议使用枚举类. 如果枚举类中只有一个对象,则可以作为单例模式的实现方式. ...
- java获取枚举索引_Java枚举使用详解
在实际编程中,往往存在着这样的"数据集",它们的数值在程序中是稳定的,而且"数据集"中的元素是有限的. 例如星期一到星期日七个数据元素组成了一周的"数 ...
- java 枚举 方法_Java枚举使用方法详解
在实际编程中,往往存在着这样的"数据集",它们的数值在程序中是稳定的,而且"数据集"中的元素是有限的. 例如星期一到星期日七个数据元素组成了一周的"数 ...
- java枚举 数字_java 枚举
Java中枚举的线程安全性及序列化问题 --枚举是如何保证线程安全的 要想看源码,首先得有一个类吧,那么枚举类型到底是什么类呢?是enum吗?答案很明显不是,enum就和class一样,只是一个关键字 ...
- java 枚举 大小_Java枚举入门
枚举类(掌握) 枚举的诞生历史(了解) 在服装行业,衣服的分类根据性别可以表示为三种情况:男装.女装.中性服装. private ? type: public void setType(? type) ...
- java枚举类型转换_java枚举类型enum值与整数的转换
java编程中偶尔会用到枚举,为了直观,我们通常将枚举值设置为形象的单词,方便理解和使用.枚举类型相当于数据库 中字典表,但是枚举只有字典表的值,缺少其他用来表示和值一一对应的字段,当我们在数据库中保 ...
- java枚举数字_Java枚举类型的使用,数值的二进制表示
一.Java枚举类型的使用 首先请看这段代码: packagejava上课;public classEnumTest {public static voidmain(String[] args) { ...
- java枚举数字_Java 枚举 通过数字实例化枚举类型
package com.zjl.domain.enumtype; /** * 枚举类 * * @Author zjl * @Date 2018/06/27 */ public enum EnumTyp ...
- java 枚举 接口_java枚举接口
java中的枚举类 枚举类(enum),与class和interface关键字地位相同. 枚举类是一个特殊的类,可以有自己的成员变量.方法.构造器,可以实现一个或多个接口.一个java源文件中只能有一 ...
最新文章
- 智宇科技 ZYARJX-1机械臂智能小车 —— 手机端蓝牙控制程序
- Adobe Livecycle ES Workbench
- R 脚本读取汇总 Excel 表格数据
- 交换机的质量害死人呀!
- 狂神css3笔记,【CSS】CSS3学习笔记(一)——选择器
- Spring 系统学习:Spring的事务管理---事务回顾
- 赛锐信息:如何为SAP HANA部署选择理想的环境?
- 程序包OE_Order_PUB过程 Process_.Order 中出现错误ORA-20001
- mysql auto_inc_MySQL innodb_autoinc_lock_mode 详解
- 周星驰八级全国统一试卷
- Android 开发神器系列(工具篇)之 Android 屏幕共享工具
- ElasticJob简单使用
- android手机碎片管理,安卓手机如何进行系统碎片整理
- python绘制网格线_在主网格线下方绘制次要网格线
- 厨师 做菜 java_厨师做菜心得
- 电商后台:商品管理系统
- 《令人心动的offer(第二季)》学习笔记
- 优信二手车业务规模大幅增长 业绩亮眼
- 为2017年出生的孩子免费取名字,孩子起名要注意的问题
- 三星笔记本U盘重装win10系统教程