管理某个模块下所有的枚举类

设计管理枚举类的工具类 阅读详情

在开发中不可避免会用到枚举值。
一:通过各个枚举类。二通过字典表。

管理某个微服务模块下所有枚举

定义baseEnum接口

public interface BaseEnum {
    Integer getCode();
    String getName();

}

多个枚举类并实现

import lombok.Getter;

@Getter
public enum LanguagesEnum implements BaseEnum {

    JAVA(1,"java"),
    C(2,"c"),
    CPro(3,"C++")
    ;

    private Integer code;
    private String name;

    LanguagesEnum(Integer code, String name) {
        this.code = code;
        this.name = name;
    }
}

import lombok.Getter;

@Getter
public enum OpenCloseStatusEnum implements BaseEnum{
    OPEN_STATUS(1,"开启"),
    CLOSE_STATUS(2,"关闭")
    ;

    private Integer code;
    private String name;

    OpenCloseStatusEnum(Integer code, String name) {
        this.code = code;
        this.name = name;
    }
}

EnumManger管理类

用到了 reflections这个反射工具类。想具体了解的话可以看这个博客: https://blog.youkuaiyun.com/qq_36838191/article/details/80507206

        <dependency>
            <groupId>org.reflections</groupId>
            <artifactId>reflections</artifactId>
            <version>0.9.11</version>
        </dependency>

import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import org.reflections.Reflections;
import org.reflections.scanners.SubTypesScanner;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import java.util.Set;

@Component
public class EnumManager {


    /**
     *某个元素格式是:<枚举类名,<code,codeName>>
     */
    private static final Map<String,Map<Integer,String>>AllCodeMap = new HashMap<>();
    /**某个元素格式是:<枚举类名,<codeName,code>>
     * */
    private static final Map<String,Map<String,Integer>>AllCodeNameMap = new HashMap<>();

    public static Map<String,Map<Integer,String>> getAllCodeMap(){
        return AllCodeMap;
    }

    /**通过code值获取codeName
     * @param clazz 枚举类
     * @param code 枚举类的code值
     * @return
     */
    public static String getCodeName(Class<? extends BaseEnum> clazz,Integer code){
        if (Objects.isNull(clazz)){
            return "";
        }
        return getCodeName(clazz.getSimpleName(),code);
    }

    private static String getCodeName(String clazz, Integer code) {
        if (StrUtil.isBlank(clazz) || Objects.isNull(code)){
            return "";
        }
        final Map<Integer, String> codeMap = AllCodeMap.get(clazz);
        return codeMap.getOrDefault(code,"");
    }

    /**根据codeName 得到对应code
     * @param clazz 枚举类
     * @param codeName 枚举类中的codeName
     * @return
     */
    public static Integer getCodeByCodeName(Class<? extends BaseEnum> clazz,String codeName){
        if (Objects.isNull(clazz)){
            return 0;
        }
        return getCodeByCodeName(clazz.getSimpleName(),codeName);

    }
    public static Integer getCodeByCodeName(String clazz,String codeName){
        if (StrUtil.isBlank(clazz) ||StrUtil.isBlank(codeName) ){
            return 0;
        }
        final Map<String, Integer> codeNameMap = AllCodeNameMap.get(clazz);
        return codeNameMap.get(codeName);
    }
    @PostConstruct
    public void afterPropertiesSet(){
    	// 若是别的模块不引用的话,没什么问题
        final Reflections reflections = new Reflections("com.example.demo.enums", new SubTypesScanner());
        // 若是有别的模块使用( 上面这中写法,可能发布的时候,模块 无法打开jar包)
        final Reflections reflections = new Reflections( ClasspathHelper.forClass(BaseEnum.class));
        final Set<Class<? extends BaseEnum>> subTypesOf = reflections.getSubTypesOf(BaseEnum.class);
        if (CollUtil.isEmpty(subTypesOf)){
            return;
        }
        subTypesOf.forEach(base ->{
            final BaseEnum[] enumConstants = base.getEnumConstants();
            HashMap<Integer, String> codeMap = new HashMap<>();
            HashMap<String, Integer> codeNameMap = new HashMap<>();

            AllCodeMap.put(base.getSimpleName(),codeMap);
            AllCodeNameMap.put(base.getSimpleName(),codeNameMap);

            for (BaseEnum enumConstant : enumConstants) {
                codeMap.put(enumConstant.getCode(),enumConstant.getName());
                codeNameMap.put(enumConstant.getName(),enumConstant.getCode());
            }
        });
    }

}

测试一下

    @GetMapping("/testCode")
    public void testEnumManager(){
        Map<String, Map<Integer, String>> allCodeMap = EnumManager.getAllCodeMap();

        String codeName = EnumManager.getCodeName(OpenCloseStatusEnum.class, 1);

        Integer code = EnumManager.getCodeByCodeName(OpenCloseStatusEnum.class, "开启");

    }

效果如下
在这里插入图片描述

Python枚举类详解:用enum模块高效管理常量数据 在编程中,常量的管理是一个关键环节,合理的管理常量可以提高代码的可读性和可维护性。Python的`enum`模块提供了一种有效的方式来组织常量数据,通过枚举类(Enum)将相关的常量值集合在一起,使代码更具结构性和直观性。本文将全面介绍Python枚举类的使用方法,包括`Enum`的定义与操作、`IntEnum`和`Flag`的高级用法,以及结合枚举类的数据管理实例。通过大量代码示例和详细的中文注释,我们将逐步展示如何通过枚举类提升代码质量。 阅读详情

相关推荐

Simulink枚举类型实战:3种方法生成与管理(附代码对比)

本文深入探讨了Simulink中枚举类型的三种生成与管理方法:数据字典定义、M文件定义及混合式管理。通过对比分析每种方法生成的C代码结构差异,并结合嵌入式项目实战经验,为工程师在不同工程场景(如资源受限MCU、AUTOSAR开发)下选择最优方案提供指导,旨在提升生成代码的可读性、可维护性及与外部代码的集成效率。

weixin_29093017的博客 326

java枚举的集中管理

java枚举的集中管理 一、 产品中遇到的实际情况枚举类泛滥 这个 这个 这个 这个 在 JDK 1.5 之前没有枚举类型,那时候一般用接口常量来替代。而使用 Java 枚举类型 enum 可以更贴近地表示这种常量。但是在项目中,就变成这样了 二、 如何实现统一管理枚举 整体思路就是让枚举的类变少,只存在被抽象出来的几个类型的枚举类,在需要使用的地方动态的构建为所需要的枚举类型赋予对应的值,就可以了 三、 对枚举进行抽象 其实多注意看一些枚举类型,就是 单值类型的,多值类型的,还有一些复杂类型的,这里

洋仔的博客 1333

SpringBoot入门教程:枚举嵌套分组

接口中可以定义多个枚举定义,而接口中的枚举可以实现当前接口。在接口中定义多个枚举,可以对枚举进行分组(分类),如 大类中又分小类,或者 一级中又分二级。对枚举分组,在使用时就像链时语法一样可以一直点下去。......

人不风流枉少年 378

统一处理不同类型的枚举类

【代码】统一处理不同类型的枚举类。

cjc000的博客 565

java枚举结果类、根据状态值获取枚举值

java枚举结果类、根据状态值获取枚举值 Controller: /** 模块类型枚举 */ model.addAttribute("mType", ModuleTypeEnum.ModuleTypeShow()); ftl: value="${mType.key}:${mType.value}”

XDMA 驱动安装与性能测试全流程解析

本文详细解析了XDMA驱动的完整安装与性能测试流程。从环境准备、源码获取、编译安装到驱动加载与设备验证,逐步指导用户打通FPGA加速卡与主机间的高速数据通道。重点介绍了如何通过官方测试脚本进行功能验证与带宽性能测试,帮助用户评估XDMA驱动的实际传输效能,为AI推理、高频交易等低延迟高带宽应用奠定基础。

weixin_29216049的博客 524

如何统一管理枚举类?

业务场景前端表单中 下拉选择的枚举值,是需要从后端获取的。那么这时候有个问题,我们不可能每次新增加一个枚举,都需要 改造获取枚举 的相关接口(getEnum),所以我们就需要对系统中的所有枚举类,进行统一的一个管理。

weixin_53294082的博客 1260

【ArcGIS】ArcMap中北京1954坐标系转WGS84的实战技巧与参数选择

本文详细解析了在ArcMap中将北京1954坐标系数据转换为WGS84坐标系的完整流程与核心技巧。针对常见的坐标偏移问题,文章首先强调了数据“归位”的重要性,并提供了处理假东、假北值的具体操作步骤。随后,重点阐述了地理变换参数(如Beijing_1954_To_WGS_1984_2)的选择逻辑及其对转换精度的决定性影响,并结合案例说明了参数选择、中央经线确认及结果验证等关键环节,旨在帮助用户高效、准确地完成坐标转换。

f6g7h8i9j的博客 329

【Python】enum 模块:创建和管理枚举类型(Enumerations)

enum 是 Python 标准库中的模块(自 Python 3.4 引入),用于创建和管理枚举类型(Enumerations)。枚举是一组命名的常量集合,可以提高代码的可读性、类型安全性和维护性。enum 模块支持定义枚举类、访问枚举成员、比较和迭代,适合需要固定选项或状态的场景,如状态机、配置选项或分类标签。支持多种枚举类型:Enum:基本枚举。IntEnum:整数枚举,支持数值比较。Flag:位标志枚举,支持位运算。IntFlag:整数位标志枚举。

彬彬侠的博客 1149

从零开始:手把手教你检查并更新英伟达GPU驱动和CUDA版本(Windows/Linux双平台)

本文详细指导如何在Windows和Linux系统上检查并更新英伟达GPU驱动和CUDA版本,解决版本不匹配导致的常见问题。涵盖驱动更新、CUDA Toolkit安装、版本冲突排解及性能优化技巧,帮助开发者高效管理GPU计算环境。

weixin_29237635的博客 701

Python+AI能源管理实战:从电力负荷预测到智能调度的全流程开发

本系统展示了Python在能源管理领域的强大能力,通过AI技术实现了从预测到优化的智能决策闭环。随着碳中和目标的推进,智能能源系统将成为新型电力系统的核心大脑。📌 专业建议:系统部署需考虑网络安全防护,关键控制指令应设置多重验证机制!关注我的优快云账号获取能源系统安全最佳实践~下期预告:我们将探索Python在智慧医疗中的应用,开发基于多模态数据的智能诊断辅助系统。想提前获取代码?评论区留言"智慧医疗"获取GitHub源码链接!

资深全栈架构师,乐于在 优快云 分享技术见解,与大家携手共进,共攀技术巅峰! 625

Spring Boot电商项目13:用户模块二:枚举类;(和【枚举数据类型】相比,【枚举类】可以管理一些复杂数据)

说明: (1)为什么要介绍枚举类?: (2)有关枚举的基础内容,如有需要可以参考【Java枚举:枚举的定义;枚举在if结构中的应用;枚举在switch结构中的应用】; 有关枚举的基础内容,如有需要可以参考【Java枚举:枚举的定义;枚举在if结构中的应用;枚举在switch结构中的应用】;但是,在这篇博客中,只是介绍了枚举数据类型,并没有介绍枚举类; 所以,本篇博客,介绍的就是枚举类; ..

小枯林的博客 1369

桁架 拓扑优化 matlab程序_拓扑优化在结构轻量化及板壳加筋肋最优布置的应用...

1 拓扑优化简介材料的有效利用一直都是人类追求的目标,也是许多研究领域不变的话题,并伴随着结构优化理论和方法的产生而发展。结构优化设计通常分为三个层次:(1)拓扑优化:在一个确定的连续区域内寻求结构内部非实体区域位置和数量的最佳配置,寻求结构中的构件布局及节点联结方式最优化,使结构能在满足应力、位移等约束条件下,将外载荷传递到结构支撑位置,同时使结构的某种性态指标达到最优;(2)形状优化:指在保持...

weixin_39525355的博客 1877

附加:枚举类;(本篇博客,没什么新的内容;只是,这儿用到了遍历枚举中枚举项的方法;)

说明: (1)为什么写本篇博客?:在【Spring Boot电商项目53:订单模块二:【前台:创建订单】接口;(这个接口比较复杂,内容较多)】,又一次使用到了枚举类;而且,这个时候枚举类是用来【定义“常量”信息】的;;;;顿时发现,枚举类可以使用的场景还是比较多的,为此写本篇博客,暂时性总结一下; (1)可以先看下【Spring Boot电商项目13:用户模块二:枚举类;(和【枚举数据类型】相比,【枚举类】可以管理一些复杂数据)】;这篇博客,总结了以前遇到过的枚举类的所有内容; (2)然后,.

小枯林的博客 538

智能车竞赛飞檐走壁组赛道制作全攻略:从电磁线铺设到立体元素搭建

本文提供了智能车竞赛飞檐走壁组赛道制作的完整指南。从电磁线选材、电流控制与精准铺设等基础入手,详细解析了垂直墙面、圆筒、跷跷板等核心立体元素的构建技巧与过渡处理。重点分享了确保赛道稳定、符合规则且便于调试的实战经验,帮助参赛队伍搭建可靠的立体赛道,为车模算法调试奠定坚实基础。

weixin_29292535的博客 1270

YOLO11涨点优化:知识蒸馏 | 引入FGD(Focal and Global Distillation)蒸馏,让轻量学生模型汲取大模型全局感知力

文章摘要 目标检测模型YOLO11在轻量化部署中存在"全局盲区"问题,即轻量模型感受野不足导致大尺度场景下性能下降。知识蒸馏技术FGD(Focal and Global Distillation)通过双分支机制有效解决这一问题:Focal Distillation分离前景背景特征,让学生模型聚焦关键区域;Global Distillation传递像素间关系信息,弥补全局感知缺陷。实验表明,FGD可使YOLO11轻量版mAP提升2.5%以上,且不增加推理耗时。本文详细解析了FGD原理,并给出YOLO11上的实

2601_95807009的博客 226

Python中使用枚举类

开发中我们经常定义常量, 其实有更好的方法:为这样的枚举类型定义一个class类型,然后,每个常量都是class的一个唯一实例。Python中提供了Enum类来实现这个功能: from enum import Enum Numbers = Enum('Name', ('乔峰', '鸠摩智', '段誉', '阿紫', '虚竹','慕容复')) for name, member in ...

weixin_30810239的博客 481

高通平台蓝牙学习-- 基于WCN6750 Bluetooth 5.2的讲解

摘要:蓝牙5.2解决方案WCN6750具备多项先进特性:完全兼容5.2标准及ANT+协议,支持2Mbps高速BLE和长距离传输;采用射频集成方案,与WLAN共享天线并支持5G并发;内置功率放大器,支持Class1/2传输;提供双音频流和Slimbus接口优化。其HCI UART接口支持3.2Mbps速率,通过BlueZ协议栈实现蓝牙5.2功能,包括2Mbps模式和长距离传输,符合核心规范要求。(149字)

专业开发者的博客,一个从事Android WiFi和蓝牙的工程师 3万+

使用枚举类

枚举类(Enum)是一种在 Python 中用于定义常量集合的特殊数据类型。它提供了一种更清晰、可读性更高的方式来管理一组常量。Python 提供了一个名为Enum的模块,可以用来创建枚举类。在上面的示例中,我们定义了一个名为Color的枚举类,其中包含了三个常量REDGREEN和BLUE。每个常量都有一个与之关联的值。枚举常量可以通过名称或者值来访问,Color.RED返回的是枚举常量对象,而返回的是与之关联的值。另外,枚举常量是唯一的,不能有相同的值,如果试图创建重复值的常量,将会引发。

weixin_44943389的博客 106

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

【QT Quick】基础语法:文件定义类型与枚举类型

这节课我们讨论的是在 QML 中使用文件定义类型以及枚举类型的相关内容。我们主要关注如何通过 QML 文件创建自定义类型,并将其作为属性变量使用,以及如何使用枚举类型来规范化代码中的一些常量。这些概念对提升 QML 编程的可维护性和灵活性非常有帮助。下面我将详细展开这两个部分的内容。

2303_80346267的博客 1184

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Python - enum 模块的详细介绍

2. 自动赋值() 3. 唯一性约束() 2. 比较操作 3. 类型检查 2. (位运算枚举) 3. 动态创建枚举 4. 自定义方法 2. 配置选项 3. 数据库映射 2. 唯一性检查使用 装饰器确保值唯一: 3. 性能优化避免在循环中频繁访问 或 (预先缓存): 七、与其他实现方式的对比 2. 自定义值类型 掌握这些技巧后,你可以:建议结合具体业务场景选择合适的枚举类型!

wanglaqqqq的博客 1148

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

比你想象中还要强大的枚举类型---案例篇

  前几天写了一篇介绍枚举功能强大的文章。有几个朋友给我指正说,没有案例单纯描述不够直观。确实啊,在这里我就在写一个案例篇,对上次的文章做补充说明。   此案例是一个游戏服务器的消息识别器的简化。做过游戏开发都知道,客户端和服务器之间的交互需要定义很多的消息类型,而且这个消息类型是需要不断扩展的。消息识别器就是根据客户端发送过来的消息编码封装成消息实体对象,以供业务逻辑层处理。这里就用...

110

枚举类工具

在项目书写过程中,对枚举类的应用比较多,比如我们的字典表在项目中的映射,业务异常的定义等等。但是,由于在团队中每个人负责的模块不同,在模块中对自己书写的枚举项的获取也不尽相同。如果身为一个项目管理者,想要在项目中制定诸如此类的统一的规范,那规范的条款之多,可能会让程序员们望而却步了。这时候一个有效的规范类就很有必要了。我们还提供一个工具类,作为枚举类code-name的转换用。如果我们在项目中需要定义自己的业务异常,只需要实现。首先给所有枚举类定义一个接口类。

Elean_ding的博客 384

ActiveRecord-PGEnum:集成PostgreSQL枚举类型与Rails枚举特性

ActiveRecord-PGEnum:集成PostgreSQL枚举类型与Rails枚举特性 项目基础介绍 ActiveRecord-PGEnum 是一个开源项目,旨在无缝集成 PostgreSQL 的枚举类型与 Rails 的枚举特性。该项目主要由 Ruby 编程语言编写,为 Rails 应用程序提供了一种更加高效和类型安全的方式来处理枚举类型。 主要编程语言 Ruby 项目核心功能 Act...

gitblog_00956的博客 633

Rust 组织管理

Rust 组织管理 任何一门编程语言如果不能组织代码都是难以深入的,几乎没有一个软件产品是由一个源文件编译而成的。本教程到目前为止所有的程序都是在一个文件中编写的,主要是为了方便学习 Rust 语言的语法和概念。对于一个工程来讲,组织代码是十分重要的。 Rust 中有三和重要的组织概念:箱、包、模块。 箱(Crate) "箱"是二进制程序文件或者库文件,存在于"包"中。 "箱"是树状结构的,它的树根是编译器开始运行时编译的源文件所编译的程序。 注意:"二进制程序文件"不一定是"二进制可执行文件",只能确定是

神棍之路 625

解决gdsfactory中Layer枚举类初始化难题:从原理到实践的完整指南

在芯片设计领域,gdsfactory作为一款强大的Python库,为光子学、模拟电路、量子器件等领域提供了高效的芯片设计解决方案。其中,Layer枚举类作为芯片层定义的核心机制,其正确初始化直接影响整个设计流程的稳定性和可靠性。本文将从原理出发,通过实例解析Layer枚举类初始化的常见问题与解决方案,帮助开发者轻松掌握这一关键技术。 ## Layer枚举类在gdsfactory中的核心作用 L

gitblog_07229的博客 489
上一篇: mongdb 下载慢,解决
下一篇: GateWay 动态路由(从nacos上取)
一个大泥球
博客等级 码龄9年 41粉丝 93原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值