枚举类的相关使用

news/2024/9/28 19:18:10

Java 枚举类

枚举类的含义

枚举类型是Java 5中新增特性的一部分,它是一种特殊的数据类型,之所以特殊是因为它既是一种类(class)类型却又比类类型多了些特殊的约束,但是这些约束的存在也造就了枚举类型的简洁性、安全性以及便捷性。

  • 枚举类的常见使用场景

    1、定义业务相同的一类属性
    2、为同一个业务场景的不同处理方式进行策略处理

  • 举例
    现在我们有一个扫码支付的场景: 支持支付宝、微信、银联等相关支付渠道
public enum PayEnum {ALI_PAY(1, "alipay"),WX_PAY(2, "wxpay"),UNION_PAY(3, "unionpay");private final Integer type;private final String payChannel;// 以空间换时间,来减少每一次枚举渠道方法调用的时间复杂度private static Map<Integer, PayEnum> payChannelEnums = new ConcurrentHashMap<Integer, PayEnum>(8);PayEnum(Integer type, String payChannel) {this.type = type;this.payChannel = payChannel;}public Integer getType() {return this.type;}public String getPayChannel() {return this.payChannel;}public static PayEnum getPayEnumByType(Integer type) {if (payChannelEnums.isEmpty()) {for (PayEnum each : PayEnum.values()) {payChannelEnums.putIfAbsent(each.getType(), each);}}return payChannelEnums.get(type);}
}
  • 枚举类注意事项

1、枚举类的每一个属性都需要定义成常量,防止外部调用时更改相关数值,保证系统的安全性
2、枚举类的每一个实例应基于规约使用全大写的形式例如: ALI_PAY、WX_PAY、UNION_PAY
3、每一个枚举每一个枚举实例都是一个静态常量实例
4、当找不到对应的枚举类是需要抛出 IllegalArgumentException 异常
5、枚举类默认 extends 自 Enum

基于 Hutool EnumUtil 获取枚举相关属性

  • 获取枚举类的全部实例属性
  EnumUtil.getFieldValues(PayEnum.class, "type"); // [1,2,3]
  • 获取枚举类中枚举实例的全部名称
  List<String> names = EnumUtil.getNames(PayEnum.class); // ["ALI_PAY", "WX_PAY", "UNION_PAY"]  
  • 获取枚举字符串 -> Enum 实例的 Map
 Map<String,PayEnum> enumMap = EnumUtil.getEnumMap(PayEnum.class); // {{ALI_PAY:ALI_PAY}, {WX_PAY:WX_PAY},{UNION_PAY:UNION_PAY}}

基于枚举类实现策略模式

 /**
* 烹饪时常枚举类
*/
public enum CookTimeEnum {NOODLE("面条", 3L) {void cookType() {System.out.println("大火烹饪");}},DUMPLING("饺子", 6L) {void cookType() {System.out.println("中火烹饪");}};/*** 食物名称*/@Getterprivate final String foodName;/*** 烹饪时间*/@Getterprivate final Long cookingTime;CookTimeEnum(String foodName, Long cookingTime) {this.foodName = foodName;this.cookingTime = cookingTime;}/*** 烹饪方式*/abstract void cookType();
}
  • 解释

1、每一个枚举类的实例都是一个 class 对象,所以每一个实例都需要重新他的抽象方法-> 以此实现策略模式

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

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

相关文章

DSP学习笔记之SPI

DSP学习笔记之SPI SPI介绍 SPI 的全称是"Serial Peripheral Interface",意为串行外围接口。SPI 是一种高速的,全双工,同步的通信总线,SPI采用主从方式工作,一般有一个主设备和一个或多个从设备; SPI需要至少4根线,分别是MISO(主设备输入从设备输出)、MOSI(…

python用魔塔大模型生成国画

模型地址 https://www.modelscope.cn/models/langboat/Guohua-Diffusion/summary 新建一个main.py from modelscope.utils.constant import Tasks from modelscope.pipelines import pipeline import cv2pipe = pipeline(task=Tasks.text_to_image_synthesis, model=langboat/G…

振弦采集仪在岩土工程监测中的数据处理与结果展示

振弦采集仪在岩土工程监测中的数据处理与结果展示 河北稳控科技振弦采集仪是岩土工程监测中常用的一种设备,用于采集地下土体振动信号,通过对数据的处理与结果的展示,可以有效地评估土体的动力特性和工程的稳定性。 振弦采集仪通过安装在土体中的振弦传感器,可以对土体的振…

BOSHIDA AC/DC电源模块的节能技术与环保优势

BOSHIDA AC/DC电源模块的节能技术与环保优势 AC/DC电源模块是一种广泛应用于各种电子设备中的电源转换器。随着环保意识的增强,节能技术成为了设计和生产这些模块的关键考虑因素。本文将介绍AC/DC电源模块的节能技术以及它们所带来的环保优势。 首先,AC/DC电源模块的节能技术…

ELL-8051-LIB - 面向8051的高效低封装函数库+KLite - 简洁易用的嵌入式操作系统内核

1、Arm-2D - 基于Cortex-M的2D图形加速库 ARM官方出品的2D图形加速库,在Cortex-M55系统频率 8MHz 下就可以实现30fps的渲染(6图层。320x240,rgb565)。项目主页: https://github.com/ARM-software/EndpointAI/tree/master/Kernels/Research/Arm-2DArm-2D 库特性包括但不限于:…

利用pearcmd实现裸文件包含

docker 环境的靶机下,有没有什么更加普适性的方法来实现文件包含+命令执行?利用pearcmd实现裸文件包含 在 ctf 中,常常有这样一类题: 题目很简单,一般围绕一个 include 函数展开。 例: ctfshow 元旦水友赛 easy_include这类题目没有提供文件上传点,因此不能使用常规方法…

怎么把excel里已经变成科学记数法的数字恢复

从数据库导出的数据经常有id字段,包含一长串的数字,导出为excel或者csv格式后打开,id字段经常被转换成科学技术法了,不方便查看。 如果想把它转变为通常的显示方法,在单元格上点击鼠标右键,点击“设置单元格格式”。 在打开的窗口中,切换到“数字”选项卡,点击“自定义…

架构每日一学 4:成为首席架构师,你必须学会顺应人性

本文首发于公众平台:腐烂的橘子架构师生存法则之二:架构活动需要顺应人性 程序员入行的第一天起就进入了一个机器的世界。在别人的眼中,程序员平时很少说话,更多的时间在和电脑打交道。 程序员工作时间久了大脑会被格式化,就像一个一个方格。它有一定好处,就是你在写代码…