综述

  enum 的全称为 enumeration, 是Java1.5引入的新特性,通过关键字enum来定义枚举类。它是一种特殊类,和普通类一样可以使用构造器、定义成员变量和方法,也能实现一个或多个接口,但枚举类不能继承其他类。

优点:将常量组织起来,统一管理。

典型应用场景:错误码、状态机、常量值是否符合约定等,避免使用繁杂的if-else语句。

  对于业务开发来说,随着业务发展,需求只会越来越复杂,为了考虑到各种各样的情况,代码中不可避免的会出现很多if-else。一旦代码中if-else过多,就会大大的影响其可读性和可维护性,而且代码显得很low,此时,就需要使用枚举类了。

枚举实现接口

  为了判断业务端传入的一个值(例如,星期几)是否符合约定的值,我们通过实现接口来查询此值是否在枚举类中存在,若存在,则是符合约定;否则,可以忽略本次请求。

    private static void getWeekRemark(Integer id) {
String remark = WeekEnum.getRemarkById(id);
if (StringUtils.isBlank(remark)) {
System.out.println("id = " + id + " 是一个不符合约定的值,请检查!");
} else {
System.out.println("remark的值是 " + remark);
}
}

其中,星期枚举类的定义如下:

import java.util.Arrays;

/**
* @Author Wiener
* @Date 2022-10-16
* @Description: 星期枚举类
*/
public enum WeekEnum {
SUNDAY(0, "星期日"),
MONDAY(1, "星期一"),
TUESDAY(2, "星期二"),
WEDNESDAY(3, "星期三"),
THURSDAY(4, "星期四"),
FRIDAY(5, "星期五"),
SATURDAY(6, "星期六"),
DEFAULT(7, ""); private Integer id;
private String remark; public Integer getId() {
return id;
} public String getRemark() {
return remark;
} WeekEnum(Integer id, String remark) {
this.id = id;
this.remark = remark;
} public static String getRemarkById(Integer id) {
// values()返回枚举类中所有的值,如MONDAY、FRIDAY
return Arrays.stream(WeekEnum.values()).filter(e ->
e.getId().equals(id)).findAny().orElse(DEFAULT).getRemark();
} }

方法getRemarkById中使用了values()方法,用以返回 enum 实例的数组,而且此数组中的元素与 enum 中声明时的顺序一致。

  如果传入的id不是0到6的正整数,getRemarkById的返回值是空字符串,说明id的值不符合约定,直接忽略本次请求即可。

  枚举类的此功能是不是比写一堆if-else给力?老铁,GET到了吗?欢迎点赞留言!

Reference

Java 枚举类的简单介绍的更多相关文章

  1. Java ArrayList类的简单介绍

    ArrayList类的说明: ArrayList类是List接口的实现类,java.util.ArrayList集合数据存储的结构是数组结构. 特点: 元素增删慢,查找快.(由于日常开发中使用最多的功 ...

  2. c++string类的简单介绍

    #include "iostream" #include "string" using namespace std; /*@author:浅滩 *family: ...

  3. Java枚举类在生产环境中的使用方式

    前言   Java枚举在项目中使用非常普遍,许多人在做项目时,一定会遇到要维护某些业务场景状态的时候,往往会定义一个常量类,然后添加业务场景相关的状态常量.但实际上,生产环境的项目中业务状态的定义大部 ...

  4. 【JAVA】浅谈java枚举类

    一.什么情况下使用枚举类? 有的时候一个类的对象是有限且固定的,这种情况下我们使用枚举类就比较方便? 二.为什么不用静态常量来替代枚举类呢? public static final int SEASO ...

  5. Java基础15:深入剖析Java枚举类

    更多内容请关注微信公众号[Java技术江湖] 这是一位阿里 Java 工程师的技术小站,作者黄小斜,专注 Java 相关技术:SSM.SpringBoot.MySQL.分布式.中间件.集群.Linux ...

  6. 浅谈java枚举类

    一.什么情况下使用枚举类? 有的时候一个类的对象是有限且固定的,这种情况下我们使用枚举类就比较方便? 二.为什么不用静态常量来替代枚举类呢? public static final int SEASO ...

  7. Java枚举类接口实战

    枚举类可以实现一个或多个接口.与普通类实现接口完全一样,枚举类实现接口时,需要实现该接口所包含的方法. 如果需要每个枚举值在调用同一个方法时呈现不同的行为,则可以让每个枚举值在{...}匿名块中实现自 ...

  8. JSON类库Jackson优雅序列化Java枚举类

    1. 前言 在Java开发中我们为了避免过多的魔法值,使用枚举类来封装一些静态的状态代码.但是在将这些枚举的意思正确而全面的返回给前端却并不是那么顺利,我们通常会使用Jackson类库序列化对象为JS ...

  9. Java枚举类、注解和反射

    本文主要介绍的是枚举类,注解和反射.还有一些基础知识:static,基本数据类型,运算符优先级放在文中,以便查阅复习. 其中牵扯到泛型的部分,可参考本人的另一篇博客:(Collection, List ...

  10. java 枚举类小结 Enum

    好久没有接触枚举类了,差不多都忘了,今天抽出个时间总结一下吧.说实话,枚举类确实能够给我们带来很大的方便. 说明:枚举类它约定了一个范围,可以理解成只可以生成固定的几个对象让外界去调用,故枚举类中的构 ...

随机推荐

  1. MyCat分库分表-练习

    模拟这样一个场景: 1.将数据库按业务"垂直"拆分成用户库和订单库: 2.用户库做主从,读写分离: 3.订单库做"水平"切分,并且每个分片表做主从,读写分离: ...

  2. 【Python】尝试切换py版本

    失败 问chatgpt,怎么把abaqus python 版本切换到py3.6,结果失败. chatgpt给出的建议: 修改abaqus_v6.env,明显扯淡!我就尝试在custom_v6.env中 ...

  3. pandas 操作excel

    一 Series 什么是series 相当于表格中的行和列,不同的设置可以按行或列排序 2.series 创建 空的series import pandas as pd s2=pd.Series() ...

  4. 线上测试木舟物联网平台之如何通过HTTP网络组件接入设备

    一.概述 木舟 (Kayak) 是什么? 木舟(Kayak)是基于.NET6.0软件环境下的surging微服务引擎进行开发的, 平台包含了微服务和物联网平台.支持异步和响应式编程开发,功能包含了物模 ...

  5. 给react native 添加transform translateY动画报错:Transform with key of "translateY" must be a number:{translateY“:0}

    初学react native,想实现一个相机扫描功能时,报错,报错描述如标题 这是我的主要逻辑代码 const fadeAnim = useRef(new Animated.Value(0)).cur ...

  6. MySQL查询建表规范

    因为之前一直再查找一些比较好的数据库规范,以方便在开发时连接 MySQL 进行查询/建表的时候,能根据规范来执行,达到提高 查询速度 / 执行 SQL 的性能 和提升 MySQL 的整体性能, 这里主 ...

  7. 解决Mac M芯片 Wireshark 运行rvictl -s 后,出现Starting device failed

    前言 mac os big sur 之后,苹果系统的安全性能提升,导致 rvictl -s 创建虚拟网卡失败. $ rvictl -s 000348120-001621w21184C01E boots ...

  8. Top 出海 AI 公司招技术!HIX.AI & Pollo.ai | 深圳

    HIX.AI & Pollo.ai 招聘高级海外 AI 产品经理 (25-45K) 岗位职责: 负责Web 端海外 AI 产品的规划与策划,负责产品需求分析及原型设计,并制定方案推动产品研发落 ...

  9. 一文彻底拿下HarmonyOS NEXT开发实战调试技巧

    > 程序员Feri一名12年+的程序员,做过开发带过团队创过业,擅长Java.嵌入式.鸿蒙.人工智能等,专注于程序员成长那点儿事,希望在成长的路上有你相伴!君志所向,一往无前! --- # 1. ...

  10. 探秘Transformer系列之(19)----FlashAttention V2 及升级版本

    探秘Transformer系列之(19)----FlashAttention V2 及升级版本 目录 探秘Transformer系列之(19)----FlashAttention V2 及升级版本 0 ...