综述

  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. PHP对表单提交特殊字符的过滤和处理方法汇总

    http://www.jb51.net/article/46921.htm PHP关于表单提交特殊字符的处理方法做个汇总,主要涉及htmlspecialchars/addslashes/stripsl ...

  2. Linux 下载安装CUDA Toolkit 12.8,配置Nvidia Driver

    cuda下载地址 https://developer.nvidia.com/cuda-downloads nvidia-smi Mon Mar 17 02:08:35 2025 +---------- ...

  3. Golang 入门 : 类型系统介绍

    Go语言类型系统 从计算机底层看,所有的数据都是由比特组成,但计算机一般操作的是固定大小的数,如整数.浮点数.比特数组.内存地址等.但是直接操控底层计算机指令进行编程是非常繁琐和容易出错的,所以Go语 ...

  4. Excel批量获取当前时间差

    使用now函数获取当前时间 Office 2007 Excel使用now函数 首先打开Excel,选中一个要插入日期的单元格 选中后,点击菜单栏上的插入,选择函数 点击后,会出现一个公式生成器,在上面 ...

  5. selenium自动化测试-获取黄金实时价格

    最近黄金比较火爆,想要获取黄金实时价格,方便后续监控预警价格,一般实时刷新的网页数据都是动态加载的,需要用到selenium自动化测试获取动态页面数据. 昨天学会了获取动态网页小说内容,同理也可以获取 ...

  6. MYSQL架构介绍

    专栏持续更新中- 本专栏针对的是掌握MySQL基本操作后想要对其有深入了解并且有高性能追求的读者. 第一篇文章主要是对MySQL架构的主要概括,让读者脑海中有个对MySQL大体轮廓,很多地方没有展开细 ...

  7. 面试题-Athas性能监控工具(原理部分未完成)

    前言 Arthas工具已经被我们项目组简单的应用到了物流项目的日常运维中.物流项目之前出现过生产消费速度不一致导致内存队列中的消息数据积压的问题,在后来解决了问题之后,我们项目组就更加重视了对JVM的 ...

  8. PHP 读取csv中的指定某些列的值

    封装一个方法,用于从CSV文件中读取指定的某些列的值时,可以使用以下示例代码: <?php class CSVReader { private $filename; private $delim ...

  9. 【SpringMVC】表单标签 & 处理静态资源

    SpringMVC 表单标签 &处理静态资源 使用 Spring 的表单标签 • 通过 SpringMVC 的表单标签可以实现将模型数据中的属性和 HTML 表单元素相绑定,以实现表单数据更便 ...

  10. argo-cd基于Kubernetes的声明式持续部署

    argo-cd基于Kubernetes的声明式持续部署 什么是argo-cd? Argo CD是一个基于Kubernetes的声明式GitOps持续交付工具. 为什么CD ? 应用程序定义.配置和环境 ...