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

news2024/11/26 12:29:31

枚举父接口

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, "禁用");

    @Getter
    private final Integer code;

    @Getter
    private 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.coloradmin.cn/o/1451184.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C#,二分法(Bisection Method)求解方程的算法与源代码

1 二分法 二分法是一种分治算法&#xff0c;是一种数学思维。 对于区间[a&#xff0c;b]上连续不断且f&#xff08;a&#xff09;f&#xff08;b&#xff09;<0的函数yf&#xff08;x&#xff09;&#xff0c;通过不断地把函数f&#xff08;x&#xff09;的零点所在的区间…

OpenCV Mat 实例详解 二

构造函数 OpenCV Mat实例详解一中已介绍了部分OpenCV Mat构造函数&#xff0c;下面继续介绍剩余部分构造函数。 Mat (const std::vector< _Tp > &vec, bool copyDatafalse)&#xff1b; vec 包含数据的vec对象 copyData 是否拷贝数据&#xff0c;true— 拷贝数据&…

蓝桥杯真题:纸张尺寸

import java.util.Scanner; // 1:无需package // 2: 类名必须Main, 不可修改public class Main {public static void main(String[] args) {Scanner scan new Scanner(System.in);//在此输入您的代码...String s scan.nextLine();char[] c s.toCharArray();char c1 c[1];in…

鸿蒙开发系列教程(二十二)--List 列表操作(1)

列表是容器&#xff0c;当列表项达到一定数量&#xff0c;内容超过屏幕大小时&#xff0c;可以自动提供滚动功能。 用于呈现同类数据类型或数据类型集&#xff0c;例如图片和文本 List、ListItemGroup、ListItem关系 列表方向 1、概念 列表的主轴方向是指子组件列的排列方…

【数据结构】无向图创建邻接表以及深度遍历、广度遍历(C语言版)

数据结构——无向图创建邻接表以及深度遍历、广度遍历 一、邻接表概念二、邻接表实现 &#xff08;1&#xff09;准备前提——结构体定义&#xff08;2&#xff09;创建边链表&#xff08;3&#xff09;打印边链表&#xff08;4&#xff09;深度优先遍历&#xff08;5&#xff…

前端可能需要的一些安装

Node.js Node.js 官网 Node.js 中文网 Node.js is an open-source, cross-platform JavaScript runtime environment. Node.js是一个开源、跨平台的JavaScript运行时环境。Recommended for most users 推荐大多数用户使用哔哩哔哩安装视频 安装 node.js 的时候&#xff0c;会…

安卓TextView 拖动命名

需求&#xff1a;该布局文件使用线性布局来排列三个文本视图和一个按钮&#xff0c;分别用于显示两个动物名称以及占位文本视图。在占位文本视图中&#xff0c;我们为其设置了背景和居中显示样式&#xff0c;并用其作为接收拖放操作的目标 效果图&#xff1b; 实现代码 第一布…

如何解决缓存和数据库的数据不一致问题

数据不一致问题是操作数据库和操作缓存值的过程中&#xff0c;其中一个操作失败的情况。实际上&#xff0c;即使这两个操作第一次执行时都没有失败&#xff0c;当有大量并发请求时&#xff0c;应用还是有可能读到不一致的数据。 如何更新缓存 更新缓存的步骤就两步&#xff0…

【C++】---类和对象(中)默认成员函数 和 操作符重载

前言&#xff1a; 假如一个类中既没有成员变量也没有成员函数&#xff0c;那么这个类就是空类&#xff0c;空类并不是什么都没有&#xff0c;因为所有类都会生成如下6个默认成员函数&#xff1a; 一、构造函数 1、构造函数的定义及其特性 对于日期类对象&#xff0c;我们可…

C语言---指针进阶

1.字符指针 int main() {char str1[] "hello world";char str2[] "hello world";const char* str3 "hello world.";const char* str4 "hello world.";if (str3 str4){//常量字符串在内存里面是无法修改的&#xff0c;所以没必要…

数据检索:倒排索引加速、top-k和k最邻近

之前在https://www.yuque.com/treblez/qksu6c/wbaggl2t24wxwqb8?singleDoc# 《Elasticsearch: 非结构化的数据搜索》我们看了ES的设计&#xff0c;主要侧重于它分布式的设计以及LSM-Tree&#xff0c;今天我们来关注算法部分&#xff1a;如何进行检索算法的设计以及如何加速倒排…

RapidMiner数据挖掘2 —— 初识RapidMiner

本节由一系列练习与问题组成&#xff0c;这些练习与问题有助于理解多个基本概念。它侧重于各种特定步骤&#xff0c;以进行直接的探索性数据分析。因此&#xff0c;其主要目标是测试一些检查初步数据特征的方法。大多数练习都是关于图表技术&#xff0c;通常用于数据挖掘。 为此…

嵌入式系统中常见传感器介绍

&#xff08;本文为简单介绍&#xff0c;内容取材网络&#xff09; 传感器是嵌入式系统接入外部环境信息的重要接口,根据测量物理量的不同,传感器可以分为温度传感器、湿度传感器、压力传感器、加速度传感器等多种类型。选择合适的传感器,对于实现嵌入式系统的控制和互动功能至…

Java微服务架构的选择:Spring Cloud、Kubernetes还是Kubernetes + Istio?

微服务架构已经成为现代软件开发的趋势&#xff0c;其可以带来高度可伸缩性、松耦合性和团队自治性等优势。 在Java开发领域中&#xff0c;选择适合的微服务架构是非常关键的决策&#xff0c;本文将探讨Spring Cloud、Kubernetes和KubernetesIstio这三个架构选择的优势和劣势。…

MIT-BEVFusion系列八--onnx导出1 综述及相机网络导出

目录 综述export-camera.py加载模型加载数据生成需要导出成 onnx 的模块Backbone 模块VTransform 模块 生成 onnx使用 pytorch 原生的伪量化计算方法导出 camera.backbone.onnx导出 camera.vtransform.onnx 综述 bevfusion的各个部分的实现有着鲜明的特点&#xff0c;并且相互…

BUGKU-WEB 本地管理员

题目描述 题目截图如下&#xff1a; 进入场景看看&#xff1a; 解题思路 老规矩&#xff0c;先看源码发现了&#xff0c;那就要base一下了测试账号密码绕过IP限制 相关工具 F12插件modHeader 或者 直接使用Burp Suit对请求进行修改 解题步骤 先输入admin测试一下 显示…

vue3 中使用pinia 数据状态管理(在Taro 京东移动端框架中的使用)

1.pinia 介绍 pinia 是 Vue 的存储库&#xff0c;它允许您跨组件/页面共享状态。就是和vuex一样的实现数据共享。 依据Pinia官方文档&#xff0c;Pinia是2019年由vue.js官方成员重新设计的新一代状态管理器&#xff0c;更替Vuex4成为Vuex5。 Pinia 目前也已经是 vue 官方正式的…

蓝桥杯2023年第十四届省赛真题

题目 题目描述&#xff1a; 程序猿圈子里正在流行一种很新的简写方法&#xff1a;对于一个字符串&#xff0c;只保留首尾字符&#xff0c;将首尾字符之间的所有字符用这部分的长度代替。例如 internation-alization 简写成 i18n&#xff0c;Kubernetes &#xff08;注意连字符不…

Javaweb之SpringBootWeb案例之AOP核心概念的详细解析

2.3 AOP核心概念 通过SpringAOP的快速入门&#xff0c;感受了一下AOP面向切面编程的开发方式。下面我们再来学习AOP当中涉及到的一些核心概念。 1. 连接点&#xff1a;JoinPoint&#xff0c;可以被AOP控制的方法&#xff08;暗含方法执行时的相关信息&#xff09; 连接点指的…

2.8学习总结

2.8 1.二叉树的前序遍历 2.二叉树的中序遍历 3.二叉树的后序遍历 4.⼆叉树的层序遍历 5.⼆叉树的层序遍历2 6.二叉树的右视图 7.二叉树的层平均值 8.N叉树的层序遍历 9.每个树行中找最大值 10.填充每个节点的下一个右侧节点指针 11.填充每个节点的下一个右侧节点指针2 12.生命之…