
Java枚举三大应用场景完整讲解代码示例一、场景1状态/类型定义最常用作用替代魔法数字、魔法字符串统一约束业务取值防止非法参数传入。示例1订单状态枚举// 订单状态publicenumOrderStatus{WAIT_PAY(1,待支付),PAID(2,已付款),DELIVERED(3,已发货),FINISH(4,已完成),CANCEL(5,已取消);privatefinalIntegercode;privatefinalStringdesc;OrderStatus(Integercode,Stringdesc){this.codecode;this.descdesc;}// getterpublicIntegergetCode(){returncode;}publicStringgetDesc(){returndesc;}}使用业务代码直接用OrderStatus.WAIT_PAY不再写数字1/2/3可读性强。二、场景2策略模式消除大量if-else作用把每个分支逻辑封装进枚举实例替代多层if/else、switch代码易扩展、符合开闭原则。示例2支付渠道策略// 支付策略枚举每个枚举自带支付逻辑publicenumPayChannel{WECHAT_PAY{Overridepublicvoidpay(LongorderId){System.out.println(调用微信支付接口订单orderId);}},ALIPAY{Overridepublicvoidpay(LongorderId){System.out.println(调用支付宝支付接口订单orderId);}},BANK_CARD{Overridepublicvoidpay(LongorderId){System.out.println(调用银行卡支付接口订单orderId);}};// 抽象支付方法publicabstractvoidpay(LongorderId);}调用方式无if elsepublicclassTest{publicstaticvoidmain(String[]args){PayChannelchannelPayChannel.WECHAT_PAY;channel.pay(10001L);}}新增支付渠道只需新增枚举实例不用修改原有判断代码。三、场景3后端接口统一返回码作用前后端约定统一错误码全局异常、接口返回直接复用规范响应格式。示例3全局响应码枚举publicenumResultCode{SUCCESS(200,操作成功),FAIL(500,操作失败),PARAM_ERROR(400,参数非法),UNAUTHORIZED(401,未登录请先登录),FORBIDDEN(403,权限不足);privatefinalIntegercode;privatefinalStringmsg;ResultCode(Integercode,Stringmsg){this.codecode;this.msgmsg;}publicIntegergetCode(){returncode;}publicStringgetMsg(){returnmsg;}}配合统一返回实体使用classResultT{privateIntegercode;privateStringmsg;privateTdata;// 快速返回成功publicstaticTResultTsuccess(Tdata){ResultTresnewResult();res.setCode(ResultCode.SUCCESS.getCode());res.setMsg(ResultCode.SUCCESS.getMsg());res.setData(data);returnres;}// 快速返回失败publicstaticTResultTfail(ResultCodecode){ResultTresnewResult();res.setCode(code.getCode());res.setMsg(code.getMsg());returnres;}// getter/setter省略}接口返回示例Result.fail(ResultCode.PARAM_ERROR)三大场景核心对比场景核心优势适用业务状态/类型定义约束取值消除魔法值订单、商品、用户、审批状态策略模式消灭if/else易扩展支付、导出、文件解析、消息发送统一返回码全局规范前后端响应所有后端接口、全局异常处理信息区分确定内容三段代码均可直接编译运行三个场景为Java枚举工业界标准用法逻辑固定无歧义。需要验证内容若项目使用SpringBoot框架可结合注解实现枚举序列化、数据库存储转换该拓展用法需额外适配验证。