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

news/2024/5/19 1:34:51 标签: 枚举

枚举父接口

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.niftyadmin.cn/n/5378818.html

相关文章

Base64编码的优点与缺点

title: Base64编码的优点与缺点 date: 2024/2/16 14:06:37 updated: 2024/2/16 14:06:37 tags: Base64编码ASCII转换数据传输文本存储安全性数据膨胀字符串解码 Base64编码是一种将二进制数据转换为可打印ASCII字符的编码方式。它被广泛应用于数据传输和存储&#xff0c;以提升…

云计算基础-大页内存

大页内存功能概述 什么是大页内存 简单来说&#xff0c;就是通过增大操作系统页的大小来减小页表&#xff0c;从而避免快表缺失 主要应用场景 主要运用于内存密集型业务的虚拟机&#xff0c;比如对于运行数据库系统的虚拟机&#xff0c;采用HugePages(大页)后&#xff0c;可…

ARM编译器5.06下载安装

ARM编译器5.06下载安装 1.官网下载 进入官方网站ARM Complier v5.06官网下载页面 进入后的界面为 往下翻&#xff0c;找到如图位置的5.06 for windows的文件&#xff0c;点击下载&#xff0c;下载时需要登录账号 2.安装 先解压下载的压缩文件&#xff0c;在installer文件夹里…

比特币 P2PKH、P2SH

标准脚本P2PKH、P2SH 区块链重要基础知识7-1——标准脚本P2PKH、P2SH-CSDN博客 比特币中P2SH(pay-to-script-hash)多重签名的锁定脚本和解锁脚本 https://www.cnblogs.com/itlgl/p/10419325.html

MySQL 基础知识(八)之用户权限管理

目录 1 MySQL 权限管理概念 2 用户管理 2.1 创建用户 2.2 查看当前登录用户 2.3 修改用户名 2.4 删除用户 3 授予权限 3.1 授予用户管理员权限 3.2 授予用户数据库权限 3.3 授予用户表权限 3.4 授予用户列权限 4 查询权限 5 回收权限 1 MySQL 权限管理概念 关于 M…

第8讲项目整合SpringSecurity

pom.xml加下springsecurity依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId> </dependency>SecurityConfig配置文件&#xff1a; package com.java1234.config;imp…

Flume(二)【Flume 进阶使用】

前言 学数仓的时候发现 flume 落了一点&#xff0c;赶紧补齐。 1、Flume 事务 Source 在往 Channel 发送数据之前会开启一个 Put 事务&#xff1a; doPut&#xff1a;将批量数据写入临时缓冲区 putList&#xff08;当 source 中的数据达到 batchsize 或者 超过特定的时间就会…

Python爬虫html网址实战笔记

仅供学习参考 一、获取文本和链接 import requests from lxml import htmlbase_url "https://abcdef自己的网址要改" response requests.get(base_url) response.encoding utf-8 # 指定正确的编码方式tree html.fromstring(response.content, parserhtml.HTML…