IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> java项目中Enum枚举的使用 -> 正文阅读

[Java知识库]java项目中Enum枚举的使用

作者:%E6%9E%9A%E4%B8%BE%E5%B1%9E%E6%80%A7%E7%B1%BBEnumProp

????????偶然看到这篇阿里大佬用的技术https://blog.csdn.net/weixin_57907028/article/details/119152058? ?,我也来写一篇 ? ?

?整体介绍

?????????项目中有大量的状态值,当状态值需要改动时,涉及到的地方特别多,容易漏。经过多年多个项目的迭代,优化整理出来的。主要有三个类:

  • 接口IBaseEnum:主要提供枚举类的静态方法(1.8后可以写静态与默认方法),主要是转换。
  1. 例如Excel数据导入,状态是中文,存到数据库用数字或字符串,可以用parseByName方法;
  2. 从数据库读出来页面显示用中文时,可以用parse方法。
  3. 页面上下拉框选择,可以通过getPropList方法取得枚举所有选项
  • 枚举属性类EnumProp:
  1. val、code用于数据库存储,
  2. name用于后台或内部显示、
  3. dispName用于前台页面显示、dispHtml用于状态带样式显示,可以让整个平台风格一致,EnumProp对象可以转换成json对象,在前端就可以直接使用
  • 具体枚举类,例如季节定义ESeason,每添加一个枚举只需要关注枚举项和描述即可

?枚举的使用

	public static void main(String[] args) {
		// 通过val转换成枚举对象
		ESeason eSpring = IBaseEnum.parse(ESeason.class, 1);
		System.out.println(eSpring.getDispName());
		System.out.println();

		// 通过code转换成枚举对象
		ESeason eSummer = IBaseEnum.parse(ESeason.class, "SUMMER");
		System.out.println(eSummer.getDispName());
		System.out.println();

		// 取得枚举的所有属性
		List<EnumProp> list = IBaseEnum.getPropList(ESeason.class);
		for (EnumProp tmp : list) {
			System.out.println(tmp.getDispName());
		}
	}

具体代码如下:

  • 接口IBaseEnum

/** */
package com.wjz.common.utils.enums;

import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;

/**
 * 公共枚举接口
 * @author: 王金洲 2021-03-02 10:18:01
 */
public interface IBaseEnum {

	/**
	 * 根据val返回枚举
	 * @param ec
	 * @param val
	 * @return
	 * @author wangjz 2018年12月12日上午9:56:11
	 */
	public static <T extends IBaseEnum> T parse(Class<T> ec, Integer val) {
		for (T t : ec.getEnumConstants()) {
			if (t.getProp().getVal().equals(val)) {
				return t;
			}
		}
		return null;
	}

	/**
	 * 根据code返回枚举
	 * @param ec
	 * @param code
	 * @return
	 * @author wangjz 2018年12月12日上午9:56:11
	 */
	public static <T extends IBaseEnum> T parse(Class<T> ec, String code) {
		for (T t : ec.getEnumConstants()) {
			if (t.getProp().getCode().equals(code)) {
				return t;
			}
		}
		return null;
	}

	/**
	 * 根据name返回枚举
	 * @param ec
	 * @param name
	 * @return
	 * @author songjy 2019年11月25日上午9:56:11
	 */
	public static <T extends IBaseEnum> T parseByName(Class<T> ec, String name) {
		for (T t : ec.getEnumConstants()) {
			if (t.getProp().getName().equals(name)) {
				return t;
			}
		}
		return null;
	}


	/**
	 * 获取某一枚举类的所有枚举值,返回List
	 * @param ec
	 * @return
	 * @author: wangjz 2018年6月6日下午6:25:51
	 */
	public static <T extends IBaseEnum> List<EnumProp> getPropList(Class<T> ec) {
		List<EnumProp> list = new ArrayList<>();
		for (T t : ec.getEnumConstants()) {
			list.add(t.getProp());
		}
		return list;
	}

	/**
	 * 判断val是否相同
	 * @param val
	 * @return
	 * @author: 王金洲 2021-03-02 10:10:56
	 */
	default boolean eq(Integer val) {
		return getProp().getVal().equals(val);
	}

	/**
	 * 判断code是否相同
	 * @param code
	 * @return
	 * @author: 王金洲 2021-03-02 10:10:59
	 */
	default boolean eq(String code) {
		return getProp().getCode().equals(code);
	}

	/** 取得 枚举key */
	default String getEnumKey() {
		return getProp().getEnumKey();
	}

	/** @取得 状态值 */
	default Integer getVal() {
		return getProp().getVal();
	}

	/** @取得 状态编号 */
	default String getCode() {
		return getProp().getCode();
	}

	/** @取得 状态名称 */
	default String getName() {
		return getProp().getName();
	}

	/** @取得 显示名称 */
	default String getDispName() {
		return getProp().getDispName();
	}

	/** @取得 html显示样式 */
	default String getDispHtml() {
		return getProp().getDispHtml();
	}

	/** 获取枚举的描述信息 */
	public String getRemark();

	/** @取得 枚举状态信息 */
	public EnumProp getProp();
}
  • 枚举属性类EnumProp

????????val、code用于数据库存储,name用于后台显示、dispName用于前台页面显示、dispHtml用于状态带样式显示,可以让整个平台风格一致。EnumProp对象可以转换成json对象,在前端就可以直接使用

/** */
package com.wjz.common.utils.enums;

import com.wjz.common.utils.json.JsonUtils;

/**
 * 枚举中用到的属性
 * @author: 王金洲 2021-07-29 14:50:52
 */
public class EnumProp {
	/** 枚举key */
	private String enumKey;
	/** 状态值 */
	private Integer val;
	/** 状态编号 */
	private String code;
	/** 状态名称 */
	private String name;
	/** 显示名称 */
	private String dispName;
	/** html显示样式 */
	private String dispHtml;

	/**
	 * 构造函数
	 */
	public EnumProp() {
		super();
	}

	/**
	 * 构造函数
	 * @param val
	 */
	public EnumProp(Integer val) {
		this(val, null, null, null, null);
	}

	/**
	 * 构造函数
	 * @param code
	 */
	public EnumProp(String code) {
		this(null, code, null, null, null);
	}

	/**
	 * 构造函数
	 * @param val
	 * @param name
	 */
	public EnumProp(Integer val, String name) {
		this(val, null, name, null, null);
	}

	/**
	 * 构造函数
	 * @param code
	 * @param name
	 */
	public EnumProp(String code, String name) {
		this(null, code, name, null, null);
	}

	/**
	 * 构造函数
	 * @param val
	 * @param code
	 * @param name
	 */
	public EnumProp(Integer val, String code, String name) {
		this(val, code, name, null, null);
	}

	/**
	 * 构造函数
	 * @param val
	 * @param code
	 * @param name
	 * @param dispName
	 */
	public EnumProp(Integer val, String code, String name, String dispName) {
		this(val, code, name, dispName, null);
	}

	/**
	 * 构造函数
	 * @param val
	 * @param code
	 * @param name
	 * @param dispName
	 * @param dispHtml
	 */
	public EnumProp(Integer val, String code, String name, String dispName, String dispHtml) {
		super();
		this.val = val;
		this.code = code;
		this.name = name;
		this.dispName = dispName;
		this.dispHtml = dispHtml;

		if (code == null) {
			this.code = val.toString();
		}
		if (name == null) {
			this.name = this.code;
		}
		if (dispName == null) {
			this.dispName = this.name;
		}
	}

	/** 取得 枚举key */
	public String getEnumKey() {
		return enumKey;
	}

	/** 设置 枚举key */
	public void setEnumKey(String enumKey) {
		this.enumKey = enumKey;
	}

	/** @取得 状态值 */
	public Integer getVal() {
		return val;
	}

	/** @设置 状态值 */
	public void setVal(Integer val) {
		this.val = val;
	}

	/** @取得 状态编号 */
	public String getCode() {
		return code;
	}

	/** @设置 状态编号 */
	public void setCode(String code) {
		this.code = code;
	}

	/** @取得 状态名称 */
	public String getName() {
		return name;
	}

	/** @设置 状态名称 */
	public void setName(String name) {
		this.name = name;
	}

	/** @取得 显示名称 */
	public String getDispName() {
		return dispName;
	}

	/** @设置 显示名称 */
	public void setDispName(String dispName) {
		this.dispName = dispName;
	}

	/** @取得 html显示样式 */
	public String getDispHtml() {
		return dispHtml;
	}

	/** @设置 html显示样式 */
	public void setDispHtml(String dispHtml) {
		this.dispHtml = dispHtml;
	}

	/**
	 * override
	 * @return
	 * @author wangjz 2018年9月25日下午1:36:02
	 */
	@Override
	public String toString() {
		return JsonUtils.getString(this);
	}

}
  • 具体枚举类

例如季节定义ESeason,让每个枚举只需要定义枚举项和描述即可

/** */
package com.wjz.common.utils.enums;

/**
 * @author: 王金洲 2021-07-29 14:58:32
 */
public enum ESeason implements IBaseEnum {
	/** 春天 */
	SPRING(new EnumProp(1, "春天")),
	/** 夏天 */
	SUMMER(new EnumProp(2, "SUMMER", "夏天")),
	/** 秋天 */
	AUTUMN(new EnumProp(2, "AUTUMN", "秋天", "秋天", "<b style='color:yellow'>秋天</b>")),
	/** 冬天 */
	WINTER(new EnumProp(2, "WINTER", "冬天", "冬天", "<b style='color:yellow'>冬天</b>")),;

	@Override
	public String getRemark() {
		return "季节定义";
	}

	/** ================ 以下信息基本不用变 ====================== */
	/** 枚举状态信息 */
	private EnumProp prop;

	/**
	 * 构造函数
	 * @param val
	 * @param name
	 */
	private ESeason(EnumProp prop) {
		prop.setEnumKey(toString());
		this.prop = prop;
	}

	/** @取得 枚举状态信息 */
	@Override
	public EnumProp getProp() {
		return prop;
	}

}

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-07-30 12:36:58  更:2021-07-30 12:38:40 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/2 0:30:41-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码