1 分钟 学会酷炫技能,关于枚举类型,你绝对没用过如此酷炫的使用方式!

大家好,我是五阳,最近在偷学兄弟团队的代码,收获较多,现在我给大家做一个期末汇报。

枚举类型适用于有限且固定值的场景,比如状态、返回值类型等类型字段,可以将所有情况枚举出来。最近我发现了一些新颖的使用方式,并想分享给大家。

为了增加系统的灵活性,有时候我们不会在代码中写死一些限制条件,比如每天的购买数量限制。这时候我们可以从动态字典服务中获取这些值。

举个例子,下面的工具方法可以调用公司内部的工具类来获取动态配置的值。

csharp 复制代码
public static int getMaxBuyCountDaily() {
   return DynamicKeyUtil.getInt("max_buy_count_daily", 10);
}

一般情况下,都是这么写,我本来也坚信这是理所当然的。然而,令我意外的是,直到最近一天,当我偷偷地学习了其他团队的代码后,我发现了一种全新的写作方式,一种神奇的方式!这让我对枚举类型有了全新的认识。

typescript 复制代码
public enum CommonDynamicKeyEnum {
   MAX_BUY_COUNT_DAILY("max_buy_count_daily", 10),
   DEGRADE_CHECK_BUY_COUNT_DAILY("degrade_check_buy_count_daily", false);
   
   private String name;
   private Object value;
   
   CommonDynamicKeyEnum(String name, Object value) {
      this.value = value;
      this.name = name;
   }
   public Boolean getBoolean() {
      return DynamicKeyUtil.getBoolean(name, (Boolean) value);
   }
   public int getInt() {
      return DynamicKeyUtil.getInt(name, (int) value);
   }
}

在上面的代码中,CommonDynamicKeyEnum 是一个枚举类型,其中包含两个字段,动态Key和默认值。当业务代码需要获取动态值时,可以通过 CommonDynamicKeyEnum.MAX_BUY_COUNT_DAILY.getInt() 来获取。

起初我看到这段代码时,对于枚举类型的使用感到有些滥用。因为在我之前的认知中,枚举类型通常是这样使用的。

arduino 复制代码
public enum OrderStatusEnum {
   INIT(1, "初始化"),
   SUCCESS(2, "成功"),
   FAIL(3, "失败");

   private int value;
   private String name;

   OrderStatusEnum(int value, String name) {
      this.value = value;
      this.name = name;
   }   
}

但是我尝试使用枚举类型改进我们的代码后,发现动态Key 场景使用枚举类型是非常好的实践。这样可以将相关的动态配置封装在一个枚举类中,并避免代码的重复。因为如果使用 DynamicKeyUtil.getInt 来调用和封装静态方法,至少需要三行代码来新增一个动态KEY。

然而使用枚举类型,只需要一行代码即可实现。例如 MAX_BUY_COUNT_DAILY("max_buy_count_daily", 10)

第二种枚举使用方式

如果我问你:如何管理接口的返回值,你认为应该如何处理呢?一般情况下,我都是使用 static int 方式管理。

例如这种方式 public static final int SUCCESS_CODE = 0;

现在我推荐使用枚举的方式管理返回值!

arduino 复制代码
public enum CommmonCode {
   SUCCESS(0, "成功"),
   FAIL(1, "失败");

   private String name;
   private int value;

   CommmonCode(int value, String name) {
      this.value = value;
      this.name = name;
   }

   public BizException toBizException() {
      return new BizException(value, name);
   }
   
    public BizException throwBizException() {
      throw new BizException(value, name);
   }
}

此时 你可以使用 CommonCode.FAIL.toBizException() 就可以直接构造异常,也可以使用 CommonCode.FAIL.throwBizException() 抛出异常。

这样我们只需要记住返回值的枚举类是哪一个,然后通过 IDE 选择合适的返回值,直接调用相关的工具方法,构建异常 或者抛出异常。这样总比 苦哈哈的 使用 new BizException(code, "message");的方式强多了。

以上两种使用方式虽然只节省了一点点时间,但是这种使用方式确实比之前我常用的方式 要更加优雅和简洁,希望对你有帮助。

相关推荐
冷琴19963 分钟前
基于java+springboot的酒店预定网站、酒店客房管理系统
java·开发语言·spring boot
daiyang123...30 分钟前
IT 行业的就业情况
java
爬山算法1 小时前
Maven(6)如何使用Maven进行项目构建?
java·maven
.生产的驴1 小时前
Electron Vue框架环境搭建 Vue3环境搭建
java·前端·vue.js·spring boot·后端·electron·ecmascript
爱学的小涛1 小时前
【NIO基础】基于 NIO 中的组件实现对文件的操作(文件编程),FileChannel 详解
java·开发语言·笔记·后端·nio
吹老师个人app编程教学1 小时前
详解Java中的BIO、NIO、AIO
java·开发语言·nio
爱学的小涛1 小时前
【NIO基础】NIO(非阻塞 I/O)和 IO(传统 I/O)的区别,以及 NIO 的三大组件详解
java·开发语言·笔记·后端·nio
北极无雪1 小时前
Spring源码学习:SpringMVC(4)DispatcherServlet请求入口分析
java·开发语言·后端·学习·spring
琴智冰1 小时前
SpringBoot
java·数据库·spring boot
binqian1 小时前
【SpringSecurity】基本流程
java·spring