广告
返回顶部
首页 > 资讯 > 后端开发 > Python >详解Java枚举类在生产环境中的使用方式
  • 575
分享到

详解Java枚举类在生产环境中的使用方式

2024-04-02 19:04:59 575人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

目录前言使用1、确定业务场景状态2、定义枚举类3、自定义查询方法4、测试效果总结前言   Java枚举在项目中使用非常普遍,许多人在做项目时,一定会遇到要维护某些

前言

  Java枚举在项目中使用非常普遍,许多人在做项目时,一定会遇到要维护某些业务场景状态的时候,往往会定义一个常量类,然后添加业务场景相关的状态常量。但实际上,生产环境的项目中业务状态的定义大部分是由枚举类来完成的,因为更加清晰明确,还能自定义不同的方法来获取对应的业务状态值,十分方便。

以下代码均为生产环境已上线项目的代码片段,仅供参考。

使用

大体分为确定业务场景状态、定义枚举类、自定义查询方法、测试效果等几个部分。

1、确定业务场景状态

以我工作中实际的项目为例,智慧医院在挂号、门诊缴费时需要使用支付功能,我们目前实现了以下几种支付形式:微信小程序支付、微信H5支付、支付宝小程序支付、支付宝生活号支付、微信医保支付。
那么,我们就可以针对这几种支付形式定义一个枚举类专门维护,今后需要新增、修改以及删除时,只需要修改这个枚举类即可。

2、定义枚举类

public enum PayTypeEnum {
 
    WEI_XIN_MINI_APP("1", "wxma", "微信小程序支付"),
 
    WEI_XIN_H5("2", "wxh5", "微信H5支付"),
 
    ZFB_MINI_APP("3", "zfbma", "支付宝小程序支付"),
 
    ZFB_H5("4", "zfbh5", "支付宝生活号支付"),
 
    WEI_XIN_MEDICAL("5", "wxmedical", "微信医保支付");
 
    private final String id;
    private final String code;
    private final String label;
 
    PayTypeEnum(final String id, final String code, final String label) {
        this.id = id;
        this.code = code;
        this.label = label;
    }
 
    public String getId() {
        return id;
    }
 
    public String getCode() {
        return code;
    }
 
    public String getLabel() {
        return label;
    }
 
}

3、自定义查询方法

枚举类我们定义了id、code、label,那么我们使用过程中可能需要根据id获取枚举值、根据code获取枚举值(本人大部分时候都定义的这两个),甚至根据label获取枚举值,因此可以根据需要自定义自己的查询方法。


public static PayTypeEnum findById(String id) {
    for (PayTypeEnum type : PayTypeEnum.values()) {
        if (type.getId().equals(id))
            return type;
    }
    return null;
}
 

public static PayTypeEnum findByCode(String code) {
    for (PayTypeEnum type : PayTypeEnum.values()) {
        if (type.getCode().equals(code))
            return type;
    }
    return null;
}

为了更完善,我们还可以再定义一个检查枚举类型的方法。


public static void check(String id) {
    if (StringUtils.isEmpty(id)) {
        throw new BadRequestAlertException("无效的支付类型", "PayTypeEnum", "无效的支付类型");
    }
    for (PayTypeEnum type : PayTypeEnum.values()) {
        if (type.getId().equals(id)) {
            return;
        }
    }
    throw new BadRequestAlertException("无效的支付类型", "PayTypeEnum", "无效的支付类型");
}

最终代码如下:

import com.WEB.rest.errors.BadRequestAlertException;
import org.springframework.util.StringUtils;
 
public enum PayTypeEnum {
 
    WEI_XIN_MINI_APP("1", "wxma", "微信小程序支付"),
 
    WEI_XIN_H5("2", "wxh5", "微信H5支付"),
 
    ZFB_MINI_APP("3", "zfbma", "支付宝小程序支付"),
 
    ZFB_H5("4", "zfbh5", "支付宝生活号支付"),
 
    WEI_XIN_MEDICAL("5", "wxmedical", "微信医保支付");
 
    private final String id;
    private final String code;
    private final String label;
 
    PayTypeEnum(final String id, final String code, final String label) {
        this.id = id;
        this.code = code;
        this.label = label;
    }
 
    public String getId() {
        return id;
    }
 
    public String getCode() {
        return code;
    }
 
    public String getLabel() {
        return label;
    }
 
    
    public static PayTypeEnum findById(String id) {
        for (PayTypeEnum type : PayTypeEnum.values()) {
            if (type.getId().equals(id))
                return type;
        }
        return null;
    }
 
    
    public static PayTypeEnum findByCode(String code) {
        for (PayTypeEnum type : PayTypeEnum.values()) {
            if (type.getCode().equals(code))
                return type;
        }
        return null;
    }
 
    
    public static void check(String id) {
        if (StringUtils.isEmpty(id)) {
            throw new BadRequestAlertException("无效的支付类型", "PayTypeEnum", "无效的支付类型");
        }
        for (PayTypeEnum type : PayTypeEnum.values()) {
            if (type.getId().equals(id)) {
                return;
            }
        }
        throw new BadRequestAlertException("无效的支付类型", "PayTypeEnum", "无效的支付类型");
    }
 
}

4、测试效果

public static void main(String[] args) {
 
   System.out.println("============= 获取枚举类的值 =============");
   System.out.println("获取id:" + PayTypeEnum.WEI_XIN_MINI_APP.getId());
   System.out.println("获取code:" + PayTypeEnum.WEI_XIN_MINI_APP.getCode());
   System.out.println("获取label:" + PayTypeEnum.WEI_XIN_MINI_APP.getLabel());
 
 
   System.out.println("============= 根据自定义的查询方法获取值 =============");
   System.out.println("根据id获取枚举对象:" + PayTypeEnum.findById("3"));
   System.out.println("根据code获取枚举对象:" + PayTypeEnum.findByCode("zfbma"));
 
 
   System.out.println("============= 类型有效性检查 =============");
   System.out.print("检查1:");
   PayTypeEnum.check("1");
   System.out.println();
   System.out.print("检查2:");
   PayTypeEnum.check("999");
}

打印如下:

============= 获取枚举类的值 =============
获取id:1
获取code:wxma
获取label:微信小程序支付
============= 根据自定义的查询方法获取值 =============
根据id获取枚举对象:ZFB_MINI_APP
根据code获取枚举对象:ZFB_MINI_APP
============= 类型有效性检查 =============
检查1:
检查2:无效的支付类型
 
Process finished with exit code 0

总结

  Java枚举类的定义,大部分都和业务场景有关,但凡是类似于业务状态值的定义,最好都使用枚举类,这样便于维护和阅读,但每个工程师和研发团队的风格都是不同的,仅以个人这些年的工作经历而言,往往参与一个项目,到后期会形成大量的枚举类,而不是大量的常量类,常量类顶多只有一个,太多的话根本无法维护,尤其是人员变更之后,新来的同事对于大量的常量类感到头疼,但枚举类却能清晰的表达该业务的场景及用法。

到此这篇关于详解Java枚举类在生产环境中的使用方式的文章就介绍到这了,更多相关Java枚举类内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 详解Java枚举类在生产环境中的使用方式

本文链接: https://www.lsjlt.com/news/138151.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 详解Java枚举类在生产环境中的使用方式
    目录前言使用1、确定业务场景状态2、定义枚举类3、自定义查询方法4、测试效果总结前言   Java枚举在项目中使用非常普遍,许多人在做项目时,一定会遇到要维护某些...
    99+
    2022-11-13
  • Java枚举类在生产环境中怎么使用
    这篇文章主要讲解了“Java枚举类在生产环境中怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java枚举类在生产环境中怎么使用”吧!使用大体分为确定业务场景状态、定义枚举类、自定义查...
    99+
    2023-06-29
  • vue中控制mock在开发环境使用,在生产环境禁用方式
    目录vue控制mock在开发环境使用,在生产环境禁用说下原因解决方案vue中使用mock(常用方式) 前期准备安装axios和mock.js插件在main.js中引入编写m...
    99+
    2022-11-13
  • Java中的反射,枚举及lambda表达式的使用详解
    目录一、反射1.1定义1.2用途1.3反射基本信息1.4与反射相关的类1.5Class类(反射机制的起源)1.6Class类中的相关方法1.7获得Class对象的三种方式1.8反射的...
    99+
    2022-11-13
  • 在Java项目中使用枚举类型的方法有哪些
    这期内容当中小编将会给大家带来有关在Java项目中使用枚举类型的方法有哪些,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。 Java枚举类型enum一、   通常定义常量方法我...
    99+
    2023-05-31
    java 枚举 ava
  • Java SpringBoot在RequestBody中高效的使用枚举参数原理案例详解
    在优雅的使用枚举参数(原理篇)中我们聊过,Spring对于不同的参数形式,会采用不同的处理类处理参数,这种形式,有些类似于策略模式。将针对不同参数形式的处理逻辑,拆分到不同处理类中,...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作