首页 > 作文

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

更新时间:2023-04-04 21:40:27 阅读: 评论:0

目录
前言使用1、确定业务场景状态2、定义枚举类3、自定义查询方法4、测试效果总结

前言

  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;     aabc式的成语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获取枚举值,因此可以根据需要自定义自己的查询方法。

/** * 根据id获取枚举对象 * @param id  */public static paytypeenum findbyid(string id) {    for (paytypeenum type : paytypeenum.values()) {        if (type.getid().equals(id))            return type;    }    return null;} /** * 根据code获取枚举对象 * @param code  */public static paytypeenum findbycode(string code) {    for (paytypeenum type : paytypeenum.values()) {        if (type.getcode().equals(code))            return type;    }    return null;}

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

/** * 检查支付类型是否有效 * @param id  */public static void check(string id) {    if (stringutils.impty(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;    }     /**     * 根据id获取枚举对象     * @param id      */    public static paytypeenum findbyid(string id) {        for (paytypeenum type : paytypeenum.values()) {            if (type.getid().equals(id))                return type;        }        return null;    }     /**     * 根据code获取枚举对象     * @param code     */    public static paytypeenum findbycode(string code) {        for (paytypeenum type : paytypeenum.values()) {            if (type.getcode().equ朽木死灰als(code))                return type;        }        return null;    }     /**     * 检查支付类型是否有效     * @param id      */    public static void check(string id) {        if (stringutils.impty(id)) {            throw new badrequestalertexception("无效的支新歌2013网络红歌付类型", "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枚举类内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!

本文发布于:2023-04-04 21:40:25,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/f78729da2cdadcb4701943d33990bb21.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:详解Java枚举类在生产环境中的使用方式.doc

本文 PDF 下载地址:详解Java枚举类在生产环境中的使用方式.pdf

标签:类型   定义   自定义   业务
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图