java使用枚举类的方式存储魔法值

需求背景说明:

系统根据不同报警类型进行不同的通知操作,原写法如下:

由于上述case的内容为魔法值,根据要求需要使用枚举类型进行存储。

方式一:case后的内容不动,仅修改魔法值为枚举类型

  1. 新建枚举类,添加赋值方法

    /**

    • 报警推送类型
      */

    public enum AlarmNoticeType {

     //邮件
     E_MAIL("E-mail"),
     //    页面
     PAGE("page"),
     //    飞书
     FEISHU("feishu"),
     //    企业微信
     WECOM("weCom"),
     //    app
     APP("app");
    
     private final String type;
    
     AlarmNoticeType(String type) {
         this.type = type;
     }
    
     public static AlarmNoticeType fromValue(String value) {
         for (AlarmNoticeType type : values()) {
             if (type.type.equalsIgnoreCase(value)) {
                 return type;
             }
         }
         throw new IllegalArgumentException("Invalid notice type: " + value);
     }
    

    }

  2. 修改方法
    使用枚举类的fromValue方法进行赋值,然后使用枚举类的内容进行操作。

    AlarmNoticeType type = AlarmNoticeType.fromValue(noticeTypes[i]);
    switch (type) {
    case E_MAIL:
    try {
    Map<String, Boolean> map = new HashMap<>();
    map.put("E-mail", mailService.sendMailForLoginPwd(mail));
    results.add(map);
    } catch (Exception e) {
    e.printStackTrace();
    }
    break;
    case PAGE:
    break;
    case FEISHU:
    XxlJobHelper.log("飞书发送消息!");
    feiShuUtil.sendFeishuMsg(weCom, notice.getRoleIds());
    break;
    case WECOM:
    weComUtil.sendWeComAlarmMsg(weCom, notice.getRoleIds());
    break;
    case APP:
    break;
    }

方法二:case后的内容也合并至枚举类中

  1. 枚举类:

    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;

    // 假设存在这些相关的工具类和实体类已经正确导入
    import com.example.service.MailService;
    import com.example.util.FeiShuUtil;
    import com.example.util.WeComUtil;

    public enum NoticeType {
    E_MAIL("E-mail") {
    @Override
    public void execute(MailService mailService, Object mail, List<Map<String, Boolean>> results) {
    Map<String, Boolean> map = new HashMap<>();
    try {
    map.put("E-mail", mailService.sendMailForLoginPwd(mail));
    results.add(map);
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    },
    PAGE("page") {
    @Override
    public void execute(MailService mailService, Object mail, List<Map<String, Boolean>> results) {
    // 这里暂时没有具体逻辑,可后续按需添加
    }
    },
    FEISHU("feishu") {
    @Override
    public void execute(MailService mailService, Object mail, List<Map<String, Boolean>> results, Object weCom, List<String> roleIds) {
    XxlJobHelper.log("飞书发送消息!");
    feiShuUtil.sendFeishuMsg(weCom, roleIds);
    }
    },
    WECOM("weCom") {
    @Override
    public void execute(MailService mailService, Object mail, List<Map<String, Boolean>> results, Object weCom, List<String> roleIds) {
    weComUtil.sendWeComAlarmMsg(weCom, roleIds);
    }
    },
    APP("app") {
    @Override
    public void execute(MailService mailService, Object mail, List<Map<String, Boolean>> results) {
    // 这里暂时没有具体逻辑,可后续按需添加
    }
    };

     private final String type;
    
     NoticeType(String type) {
         this.type = type;
     }
    
     public abstract void execute(MailService mailService, Object mail, List<Map<String, Boolean>> results, Object weCom, List<String> roleIds);
    
     public static NoticeType fromValue(String value) {
         for (NoticeType type : values()) {
             if (type.type.equalsIgnoreCase(value)) {
                 return type;
             }
         }
         throw new IllegalArgumentException("Invalid notice type: " + value);
     }
    

    }

  2. 调用方法

    NoticeType type = NoticeType.fromValue(noticeTypes[i]);
    switch (type) {
    case E_MAIL:
    type.execute(mailService, mail, results);
    break;
    case PAGE:
    type.execute(mailService, mail, results, null, null);
    break;
    case FEISHU:
    type.execute(mailService, mail, results, weCom, roleIds);
    break;
    case WECOM:
    type.execute(mailService, mail, results, weCom, roleIds);
    break;
    case APP:
    type.execute(mailService, mail, results);
    break;
    }

相关推荐
爱吃土豆的程序员几秒前
git merge :开发分支与主分支的交互
java·git·git merge
相醉为友8 分钟前
005 MATLAB符号微积分
开发语言·matlab
蚰蜒螟10 分钟前
openjdk17 jvm 对象 内存溢出 在C++源码体现
开发语言·jvm·c++
爱吃零食的白糖12 分钟前
QT的exec函数
开发语言·qt
老马啸西风12 分钟前
jvm-46-jvm Thread Dump 线程的信息获取+可视分析化工具 FastThread
java
《源码好优多》15 分钟前
基于Java Springboot考研论坛系统
java
落霞的思绪32 分钟前
mybatis笔记01——初始配置
java·笔记·mybatis
大今野34 分钟前
JavaScript习题练习
开发语言·javascript·ecmascript
奔跑草-37 分钟前
【前端】Next.js 服务器端渲染(SSR)与客户端渲染(CSR)的最佳实践
开发语言·前端·javascript·react.js·reactjs
A Everyman39 分钟前
Java开发中对List<Map<String, Object>>集合去重并按大小拆分子列表
java·list·map·stream·collectors