当前位置: 首页 > news >正文

【精品】关于枚举的高级用法

枚举父接口

public interface BaseEnum {Integer getCode();String getLabel();/*** 根据值获取枚举** @param code* @param clazz* @return*/static <E extends Enum<E> & BaseEnum> E getEnumByCode(Integer code, Class<E> clazz) {Objects.requireNonNull(code);// 获取类型下的所有枚举EnumSet<E> allEnums = EnumSet.allOf(clazz);return allEnums.stream().filter(e -> e.getCode().equals(code)).findFirst().orElse(null);}/*** 根据文本标签获取枚举** @param label* @param clazz* @return*/static <E extends Enum<E> & BaseEnum> E getEnumByLabel(String label, Class<E> clazz) {Objects.requireNonNull(label);// 获取类型下的所有枚举EnumSet<E> allEnums = EnumSet.allOf(clazz);return allEnums.stream().filter(e -> e.getLabel().equals(label)).findFirst().orElse(null);}/*** 根据值获取文本标签** @param code* @param clazz* @return*/static <E extends Enum<E> & BaseEnum> String getLabelByCode(Integer code, Class<E> clazz) {// 根据值获取枚举E matchEnum = getEnumByCode(code, clazz);if (matchEnum != null) {return matchEnum.getLabel();}throw new RuntimeException("根据值获取文本标签失败");}/*** 根据文本标签获取值** @param label* @param clazz* @return*/static <E extends Enum<E> & BaseEnum, T> int getCodeByLabel(String label, Class<E> clazz) {// 根据文本获取枚举E matchEnum = getEnumByLabel(label,clazz);if (matchEnum != null) {return matchEnum.getCode();}throw new RuntimeException("根据文本标签获取值失败");}}

枚举

public enum StateEnum implements BaseEnum {/*** 启用*/ENABLE(1, "启用"),/*** 禁用*/DISABLE(0, "禁用");@Getterprivate final Integer code;@Getterprivate final String label;StateEnum(Integer code, String label) {this.code = code;this.label = label;}}

测试代码

 public static void main(String[] args) {//根据值获取枚举final StateEnum s1 = BaseEnum.getEnumByCode(1, StateEnum.class);System.out.println(s1);//根据标签获取枚举final StateEnum s2 = BaseEnum.getEnumByLabel("启用", StateEnum.class);System.out.println(s2);//根据值获取标签final String label = BaseEnum.getLabelByCode(1, StateEnum.class);System.out.println(label);//根据标签获取值final int code = BaseEnum.getCodeByLabel("禁用", StateEnum.class);System.out.println(code);
}

结果

在这里插入图片描述

http://www.lryc.cn/news/301122.html

相关文章:

  • Vue2学习第一天
  • HAL STM32通过multi_button库处理按键事件
  • 随机过程及应用学习笔记(一)概率论(概要)
  • 洛谷_P1059 [NOIP2006 普及组] 明明的随机数_python写法
  • 爆火的人工智能开源open-interpreter源码解析
  • POM设计模式思路,详解POM:概述与介绍,POM思路梳理+代码示例(全)
  • 1、学习 Eureka 注册中心
  • 何为分账系统?
  • 机器学习10-特征缩放
  • Java基于微信小程序的医院挂号小程序,附源码
  • HarmonyOS一杯冰美式的时间 -- 验证码框
  • GitLab配置SSHKey
  • 通过QT制作一个模仿微信主界面的界面(不要求实现具体通信功能)
  • 作物模型狂奔:WOFOST(PCSE) 数据同化思路
  • 腾讯云4核8G服务器能支持多少人访问?
  • 多重背包问题 ⅠⅡ Ⅲ
  • 挑战杯 python的搜索引擎系统设计与实现
  • 【LeetCode: 103. 二叉树的锯齿形层序遍历 + BFS】
  • C#学习(十三)——多线程与异步
  • MySQL 数据库安装教程详解(linux系统和windows系统)
  • 从汇编分析C语言可变参数的原理,并实现一个简单的sprintf函数
  • Word docx文件重命名为zip文件,解压后直接查看和编辑
  • SpringBoot中公共字段的自动填充
  • 【天衍系列 03】深入理解Flink的Watermark:实时流处理的时间概念与乱序处理
  • day07.C++类与对象
  • String讲解
  • 人群异常聚集监测系统-聚众行为检测与识别算法---豌豆云
  • 多模态基础---BERT
  • 图表示学习 Graph Representation Learning chapter2 背景知识和传统方法
  • OpenMVG(计算两个球形图像之间的相对姿态、细化重建效果)