Enum枚举

news2024/11/25 11:16:58

枚举一般是针对常量需求,优化代码,.使代码看起来简洁

看下下面这个工具类

 说有问题,那就是是看起来代码不够简洁

我看着倒还行,也许也是枚举不怎么实用的原因

下面就用枚举来优化这个代码,首先看下枚举介绍

java中对常量数据的配置可以使用枚举类型实现,,枚举类型是面向对象中的一种类型,它

也有对象,属性,方法等所以它非常方便定义,枚举类型将它的对象(实例)设置为常量方便读取和使用.

枚举类型的实例就是下面的枚举项:

//定义枚举类要用关键字enum

public  enum 枚举类名{

        枚举项1,枚举项2,枚举项3...;

        构造方法

        成员变量

        成员方法

}

枚举类型特殊点就是枚举项,而这些枚举项就是枚举类型的实例且都是常量

根据上面的demo,下面建一个枚举类型的支付工厂类

/**
 * @author hrui
 * @date 2022/12/13 21:04
 */
public enum PayEnum {
    //枚举项就是枚举类的实例,一般命名全部大写
    //枚举项就是一个个对象
    WEIXINPAY("weixin","https://api.mch.weixin.qq.com/pay/"),
    ALIPAY("ali","https://openapi.alipay.com/"),
    UNIONPAY("union","https://gateway.95516.com/gateway/api/");


    //定义成员变量
    //支付名称
    private String name;
    //支付地址
    private String payUrl;

    //定义构造方法,注意枚举类型的构造方法是private,可以定义无参也可以定义有参
    private PayEnum(){

    }
    private PayEnum(String name,String payUrl){
        this.name=name;
        this.payUrl=payUrl;
    }
    //也有get set方法

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPayUrl() {
        return payUrl;
    }

    public void setPayUrl(String payUrl) {
        this.payUrl = payUrl;
    }
    //toString方法
    @Override
    public String toString() {
        return "PayEnum{" +
                "name='" + name + '\'' +
                ", payUrl='" + payUrl + '\'' +
                '}';
    }

    public static void main(String[] args) {
        System.out.println(PayEnum.WEIXINPAY.getName());
        System.out.println(PayEnum.WEIXINPAY.getPayUrl());
        //为什么说枚举项就是一个对象(实例)如下
        PayEnum weixinPay=PayEnum.WEIXINPAY;
        System.out.println(weixinPay.payUrl);
        System.out.println(weixinPay.getPayUrl());
        System.out.println(weixinPay.payUrl);
        System.out.println(weixinPay.getPayUrl());
    }
}

枚举类型的说明:

1.每个枚举类型继承java.lang.Enum所以枚举类不能再继承其他类型

2.枚举项就是枚举类型的对象(实例),一般使用大写字母,一个枚举项表示一个常量项,多个枚举项中间用逗号分隔.

3.枚举类型的构造方法使用private私有

4.通过"枚举类名.枚举项名称"去访问指定的枚举项

下面演示枚举实现接口

public interface SystemCode {

    //系统代码
    int getCode();

    //系统代码对应的描述
    String getDesc();
}

public enum CodeEnum implements SystemCode{
    SUCCESSFUL(1,"操作成功"),
    FAILURE(0,"操作失败"),
    ERROR(-1,"系统异常");

    private CodeEnum(int code,String desc){
        this.code=code;
        this.desc=desc;
    }

    int code;//系统代码
    String desc;//对应代码描述

    @Override
    public int getCode() {
        return 0;
    }

    @Override
    public String getDesc() {
        return null;
    }
}

好处就是可以向上转型为接口类型

 public static void main(String[] args) {
        System.out.println(CodeEnum.SUCCESSFUL.getCode());
        System.out.println(CodeEnum.SUCCESSFUL.getDesc());

        //枚举项可以向上转型为接口类型
        SystemCode systemCode=CodeEnum.SUCCESSFUL;
        System.out.println(systemCode.getCode());
        System.out.println(systemCode.getDesc());
    }

枚举项都是常量,内存中有且仅有一份,用==比较

 public static void main(String[] args) {
        System.out.println(CodeEnum.SUCCESSFUL.getCode());
        System.out.println(CodeEnum.SUCCESSFUL.getDesc());

        //枚举项可以向上转型为接口类型
        SystemCode systemCode=CodeEnum.SUCCESSFUL;
        System.out.println(systemCode.getCode());
        System.out.println(systemCode.getDesc());

        //枚举项之间如何比较   枚举项之间是使用==进行比较的:原因枚举项都是常量,内存中只有一份
        PayEnum aliPay=PayEnum.ALIPAY;
        System.out.println(aliPay==PayEnum.ALIPAY);
    }

那么现在用下面的Enum枚举去封装上面第一张图的PayFactory

这里注意为什么直接可以使用WEINPAY|ALIPAY|UNIONPAY

public class PayFactory {
//    //微信支付类型
//    public static final String weixinPayType="weixin";
//    //微信支付接口地址
//    public static final String weixinPayUrl="https://api.mch.weixin.qq.com/pay/";
//    //支付宝支付类型
//    public static final String aliPayType="ali";
//    //支付宝支付接口地址
//    public static final String aliPayUrl="https://openapi.alipay.com/";
//    //银联支付类型
//    public static final String unionPayType="union";
//    //银联支付接口地址
//    public static final String unionPayUrl="https://gateway.95516.com/gateway/api/";

    //根据支付类型获取支付服务对象

    //    public static Pay getPay(String payType){
//        Pay pay=null;
//        switch(payType){
//            case PayFactory.weixinPayType:
//                //构造微信支付对象...
//                System.out.println("构造一个微信支付对象");
//                break;
//            case PayFactory.aliPayType:
//                //构造支付宝支付对象...
//                System.out.println("构造一个支付宝支付对象");
//                break;
//            case PayFactory.unionPayType:PayType:
//                //构造银联支付对象...
//                System.out.println("构造一个银联支付对象");
//                break;
//            default:
//                break;
//        }
//        return pay;
//    }
    public static Pay getPay(PayEnum payEnum) {
        Pay pay = null;
        switch (payEnum) {
            case WEIXINPAY:
                //构造微信支付对象...
                System.out.println("构造一个微信支付对象");
                break;
            case ALIPAY:
                //构造支付宝支付对象...
                System.out.println("构造一个支付宝支付对象");
                break;
            case UNIONPAY:
                PayType:
                //构造银联支付对象...
                System.out.println("构造一个银联支付对象");
                break;
            default:
                break;
        }
        return pay;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/87404.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

3小时!开发ChatGPT微信小程序

导读 | 上周OpenAI发布了对话语言模型 ChatGPT,相关讨论引爆全网。你是否也迫不及待体验一番?本文特邀作者腾讯云开发者社区作者戴传友从开发环境准备、开发过程、服务器接口、腾讯API网关接入到部署,详细教你如何动手开发一个chatGPT微信小程…

2022年华中杯数学建模挑战赛A题分拣系统优化问题

2022年华中杯数学建模 A 题 分拣系统优化问题 真的有想占便宜的 醉了 几十元让我写论文这是什么选手 想占便宜想疯了么 还要求查重率在10% 一开始说想看看你的A题论文 想学习一下 然后谈完价(几十块钱)之后 需要改成现做一篇独一无二的论文 然后想套路我占便宜 套路是真的深啊…

【R语言绘图】R在气象、水文中数据处理及结果分析、绘图技术

【查看原文】R语言在气象、水文中数据处理及结果分析、绘图实践技术应用 【内容简述】: 一、R简介与 R 在气象水文中的应用 R语言与 R软件简介 R 在各行业的应用 R 与其他语言的比较及其在数据分析与作图上的优势 R 在地学中的应用以及R 在气象水文中的应用 二、…

【react】虚拟DOM的两种创建方式

1、使用js创建虚拟DOM <body><div id"test"></div><!-- 引入react核心库 --><script src"../js/react.development.js"></script><!-- 引入react-dom&#xff0c;用于支持react操作dom --><script src"…

大数据期末课设~基于spark的气象数据处理与分析

目录 一 、项目背景 .......................................... 3 二 、实验环境 .......................................... 3 三 、实验数据来源 ................................... 4 四 、数据获取 .......................................... 5 五 、数据分析 ....…

港科夜闻|2022年香港科大气候适应及复原力大会圆满闭幕,政经领袖研讨香港气候政策与绿色金融发展...

关注并星标每周阅读港科夜闻建立新视野 开启新思维1、2022年香港科大气候适应及复原力大会圆满闭幕&#xff0c;政经领袖研讨香港气候政策与绿色金融发展。该会议由香港科大主办&#xff0c;于12月10日开幕。会议以跨领域的知识及观点交流为方针&#xff0c;凝聚公营及私营部门…

vulnhub serial讲解

环境搭建 下载 https://download.vulnhub.com/serial/serial.zip ​ 你会得到一个这样的文件&#xff0c;这里使用VMware新建一个虚拟机&#xff0c;这里记录比较重要的几部分。 ​ ​ ​ ​ 这里就是使用我们刚才下过来的。 ​ 漏洞过程详解 1.信息收集 netdiscover -i …

[附源码]Node.js计算机毕业设计调查问卷及调查数据统计系统Express

项目运行 环境配置&#xff1a; Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境&#xff1a;最好是Nodejs最新版&#xff0c;我…

【论文】Auto-Encoding Variational Bayes

1.预备概念 1.1 后验分布 最大后验&#xff08;Maximum a Posteriori&#xff0c;MAP&#xff09;概率估计详解 【参考文章】https://blog.csdn.net/fq_wallow/article/details/104383057 1.2 重参数 Reparameterization 目的是&#xff1a; 转为公式表达从而实现微分 知乎…

编辑部已成羊村,这几天幸亏有ChatGPT(doge)

梦晨 羿阁 发自 凹非寺量子位 | 公众号 QbitAI坏事了&#xff0c;AI真的来抢饭碗了。还是我的饭碗&#xff01;这两天你们看的推送&#xff0c;有些标题是AI帮忙取的&#xff0c;有些文章甚至由AI完成了主要工作。我呢&#xff1f;我不过是打打下手&#xff0c;加些过渡句&…

RS485总线详解

RS485总线详解前言一、常见接口划分二、RS485概述&#xff08;一&#xff09;简介&#xff08;二&#xff09;接口/引脚图三、RS485总线详解&#xff08;一&#xff09;RS485总线概述&#xff08;二&#xff09;差分传输&#xff1a;&#xff08;三&#xff09;原理图&#xff…

基于51单片机的超声波测距系统设计

功能&#xff1a; 超声波测距仪&#xff0c;测量距离&#xff0c;用LCD12864显示信息。 lcd_writestr(0,0," 超声波测距仪 "); lcd_writestr(1,0,"&#xff0a;&#xff0a;&#xff0a;&#xff0a;&#xff0a;&#xff0a;&#xff0a;&#xff0a;");…

商场中央空调工程-商场商铺中央空调安装常见问题解答

商场中央空调工程-商场商铺中央空调安装常见问题解答 为了提高装修档次&#xff0c;提高舒适度&#xff0c;为顾客营造一个相对舒适的购物环境&#xff0c;很多门店都会选择安装中央空调。刚接触门店中央空调安装的客户会有很多疑问。例如&#xff0c;商店安装的中央空调和家用…

Android消息机制与源码剖析(Looper,Message,MessageQueue以及Handler)

Android消息机制 文章目录Android消息机制消息传递与处理的流程&#xff08;配图示&#xff09;1.【入口】 在 ActivityThread.class 的 main() 方法&#xff0c;为主线程创建 Looper&#xff0c;并开启 loop() 循环2.【创建Looper】通过 Looper.prepareMainLooper() 创建主线程…

MySQL如何快速恢复单表(物理方式)

GreatSQL社区原创内容未经授权不得随意使用&#xff0c;转载请联系小编并注明来源。GreatSQL是MySQL的国产分支版本&#xff0c;使用上与MySQL一致。作者&#xff1a;xryz文章来源&#xff1a;社区投稿 使用方法 1、首先创建一个测试表test1&#xff0c;并插入几条数据&#x…

DataParallel里为什么会显存不均匀以及如何解决

作者&#xff1a;台运鹏 (正在寻找internship...)主页&#xff1a;https://yunpengtai.top鉴于网上此类教程有不少模糊不清&#xff0c;对原理不得其法&#xff0c;代码也难跑通&#xff0c;故而花了几天细究了一下相关原理和实现&#xff0c;欢迎批评指正&#xff01;关于此部…

商品上下游第六讲-交易中心-商品秒杀

交易中心-商品秒杀设计 文章目录 交易中心-商品秒杀设计1、项目背景2、主要技术3、项目职责4、项目实现4.1、需求分析4.2、核心流程4.3、关键链路技术方案4.4、库存处理方式1、库存超卖问题订单层面的控制4.5、限流,熔断,降级4.6、超职购小程序—接口梳理4.7、缓存的设计4.8、…

mybatis入门(一)

什么是 MyBatis &#xff1f; MyBatis 是一款优秀的持久层框架&#xff0c;它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息&#xff0c;将接口和 Java 的…

如何使用匈牙利算法解决多维度的约束条件问题

&#x1f37f;*★,*:.☆欢迎您/$:*.★* &#x1f37f; 正文 假设 一个项目 有三个 维度的参数 A B C 都要 组合后最小 分别求解 a b c 三个维度的最优组合 如果三个组合方案刚好 重叠 那么说明有一个使得三个方案最优的 解 如果没有 那么若选择某个方案 其他维度的参数 的值 是…

直播倒计时 2 天 | SOFAChannel#31 RPC 框架设计的考和量

SOFARPC 是蚂蚁集团开源的一款基于 Java 实现的 RPC 服务框架&#xff0c;为应用之间提供远程服务调用能力&#xff0c;具有高可伸缩性&#xff0c;高容错性&#xff0c;目前蚂蚁集团所有的业务的相互间的 RPC 调用都是采用 SOFARPC。SOFARPC 为用户提供了负载均衡&#xff0c;…