Java枚举封装状态值与类型转换

前言

在许多应用中,我们需要处理具有固定数量的状态或选项的数据。例如,在库存管理系统中,产品可以有不同的状态,如“入库”、“出库”等。通过使用 Java 的枚举(enum),我们可以有效地表示这些状态,并且通过一些额外的方法来增强其功能性和易用性。

为什么这样做?

  • 类型安全:直接在枚举中定义状态值可以避免硬编码问题,并确保状态的一致性和正确性。
  • 可读性:通过枚举名称和描述性的方法名,使得代码更易于理解和维护。
  • 灵活性:提供了多种类型的获取方法,满足不同场景下的需求,而不需要额外的手动转换。
  • 封装:逻辑集中在枚举内部,对外部代码隐藏了具体实现细节,遵循了封装原则。

示例代码

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;public enum ProductStatus {IN_STOCK("入库", "0"),OUT_OF_STOCK("出库", "1"),IN_TRANSIT("在途", "2"),SOLD("已售", "3");private final String name;private final String value;ProductStatus(String name, String value) {this.name = name;this.value = value;}public String getName() {return name;}public String getStrValue() {return value;}public int getIntValue() {return Integer.parseInt(value);}public long getLongValue() {return Long.parseLong(value);}// 获取所有非"已售"状态的字符串列表public static List<String> getNotSoldValues() {return Arrays.stream(values()).filter(status -> !status.equals(SOLD)).map(ProductStatus::getStrValue).collect(Collectors.toList());}// 根据整数值获取枚举实例public static ProductStatus fromInt(int intValue) {for (ProductStatus status : values()) {if (status.getIntValue() == intValue) {return status;}}throw new IllegalArgumentException("Invalid integer value: " + intValue);}// 根据字符串值获取枚举实例public static ProductStatus fromString(String strValue) {for (ProductStatus status : values()) {if (status.getStrValue().equals(strValue)) {return status;}}throw new IllegalArgumentException("Invalid string value: " + strValue);}
}

方法解析

  • getName():返回状态的中文名称。
  • getStrValue():返回状态值作为字符串。
  • getIntValue():将状态值转换成整数。
  • getLongValue():将状态值转换成长整型。
  • getNotSoldValues():过滤掉SOLD状态后,返回剩余状态的字符串列表。
  • fromInt(int):根据整数值获取对应的枚举实例。
  • fromString(String):根据字符串值获取对应的枚举实例。

使用场景

场景一:数据库查询

假设你需要从数据库中检索产品状态为“入库”的记录,你可以这样使用:

int inStockIntValue = ProductStatus.IN_STOCK.getIntValue();
List<Product> inStockProducts = productDAO.findByStatus(inStockIntValue);
场景二:用户界面显示

当你需要在用户界面上显示产品的状态时,可以使用中文名称:

ProductStatus status = ProductStatus.valueOf(product.getStatus());
String statusName = status.getName();
System.out.println("产品状态: " + statusName);
场景三:状态转换

如果你有一个业务流程,需要根据产品的状态执行不同的操作,可以很容易地进行条件判断:

public void processProduct(Product product) {ProductStatus status = ProductStatus.fromString(product.getStatus());switch (status) {case IN_STOCK:// 处理入库状态的产品break;case OUT_OF_STOCK:// 处理出库状态的产品break;// ... 更多情况}
}

结论

通过上述示例,我们可以看到如何利用 Java 枚举来表示状态,并且通过添加各种类型转换方法来提高代码的灵活性和可读性。这种做法不仅简化了开发过程,还提高了代码的健壮性。

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

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

相关文章

Golang | Leetcode Golang题解之第486题预测赢家

题目&#xff1a; 题解&#xff1a; func PredictTheWinner(nums []int) bool {return total(nums, 0, len(nums) - 1, 1) > 0 }func total(nums []int, start, end int, turn int) int {if start end {return nums[start] * turn}scoreStart : nums[start] * turn total…

AI 视频工具合集

&#x1f423;个人主页 可惜已不在 &#x1f424;这篇在这个专栏AI_可惜已不在的博客-CSDN博客 &#x1f425;有用的话就留下一个三连吧&#x1f63c; 目录 前言: 正文: ​ 前言: AI 视频&#xff0c;科技与艺术的精彩融合。它借助先进的人工智能技术&#xff0c;为影像创…

SLAM评估工具evo学习

参考链接 官方github&#xff1a;https://github.com/MichaelGrupp/evo 一、 指令分析 1.1 tum数据集&#xff0c;evo_ape指令 evo_ape {kitti,tum,euroc,bag} -h evo_ape tum -h(1) 终端输入&#xff1a; evo_ape tum -h (2) 终端打印&#xff1a; usage: evo_ape tum …

Android Framework AMS(07)service组件启动分析-1(APP到AMS流程解读)

该系列文章总纲链接&#xff1a;专题总纲目录 Android Framework 总纲 本章关键点总结 & 说明&#xff1a; 说明&#xff1a;本章节主要解读应用层service组件启动的2种方式startService和bindService&#xff0c;以及从APP层到AMS调用之间的打通。关注思维导图中左侧部分即…

ISO 21434标准下汽车软件开发的网络安全核心要求

ISO 21434《道路车辆——汽车网络安全工程》是一个针对汽车网络安全的国际标准&#xff0c;它对汽车软件开发提出了明确的要求&#xff0c;以确保车辆在整个生命周期内的网络安全。 以下是ISO 21434网络安全标准对汽车软件开发的主要共同要求&#xff1a; 1. 安全意识与设计 …

microsoft edge浏览器卡死问题

win11经常遇到microsoft edge浏览器卡死的情况&#xff0c;有时候是一会没用浏览器就全部卡死&#xff0c;有时候是锁屏或者电脑休眠浏览器就不能用&#xff0c;找了很多的办法都没好使&#xff0c;用以下方法好使了&#xff1a; edge浏览器中打开 edge://settings/system 把 …

Cornerstone3D Tools对影像进行交互(中篇)-注释类工具使用

&#x1f3c4;‍♀️ 前言 这里是关于Cornerstone3D Tools对影像进行交互&#xff08;中篇 &#xff09;- 注释类工具的使用介绍。在 Cornerstone3D Tools对影像进行交互(上篇)-基础交互工具及同步器 一文中主要介绍了一下基础交互类工具的使用&#xff0c;感兴趣的小伙伴可以…

【优先算法】--双指针1

“一念既出&#xff0c;万山无阻。”加油陌生人&#xff01; 目录 1.双指针--移动零 2.双指针-复写零 ok&#xff0c;首先在学习之前&#xff0c;为了方便大家后面的学习&#xff0c;我们这里需要补充一个知识点&#xff0c;我这里所谓的指针&#xff0c;不是之前学习的带有…

Linux系统移植

目录 一、简介 嵌入式Linux系统移植组成部分: 二、搭建交叉开发环境 选择交叉开发环境的原因: 1.Ubuntu和Windows下的文件互传 2.Ubuntu 下 NFS和 SSH服务开启 3.Ubuntu 交叉编译工具链安装 3.1修改环境变量 3.2安装相关库 三、bootloader的选择和移植 编译U-boot 总…

中大型企业网络架构和建设方案

1. 需求分析 &#xff08;1&#xff09;用户需求&#xff1a; 员工访问&#xff1a;支持内部员工通过有线和无线网络访问企业资源。 远程访问&#xff1a;支持远程办公员工通过VPN安全访问企业内部资源。 合作伙伴和客户访问&#xff1a;允许外部合作伙伴和客户通过受控渠道访问…

Linux 外设驱动 应用 2 KEY 按键实验

2 按键 2.1 按键介绍 按键是指轻触式按键开关&#xff0c;也称之为轻触开关。按键开关是一种电子开关&#xff0c;属于电子元器件类&#xff0c;最早出现在日本&#xff0c;称之为&#xff1a;敏感型开关&#xff0c;使用时以满足操作力的条件向开关操作方向施压开关功能闭合…

东方通 TongWebV7 Docker 部署与 Spring Boot 集成指南

东方通 TongWebV7 Docker 部署与 Spring Boot 集成指南 文章目录 东方通 TongWebV7 Docker 部署与 Spring Boot 集成指南一 TongWeb V7二 Spring Boot JAR 配置文件三 修改 maven 依赖四 docker compose 启动项目五 查看 docker 信息 本文详细讲解了如何在 Docker 环境中将东方…

【笔记】Day2.5.1查询运费模板列表(未完

&#xff08;一&#xff09;代码编写 1.阅读需求&#xff0c;确保理解其中的每一个要素&#xff1a; 获取全部运费模板&#xff1a;这意味着我需要从数据库中查询所有运费模板数据。按创建时间倒序排序&#xff1a;这意味着查询结果需要根据模板的创建时间进行排序&#xff0…

嵌入式学习-IO进程-Day02

嵌入式学习-IO进程-Day02 标准IO函数接口 fread&#xff0c;fwrite 文件指针偏移函数 文件IO 概念 文件IO的特点 文件描述符 文件IO的函数接口 open 打开文件 close 关闭文件 read 读函数 write 写函数 lseek 移动文件指针 标准IO和文件IO对比 目录操作函数 opendir 打开目录 c…

套接字Socket

套接字 在网络中通过 IP 地址来表示和区别不同的主机&#xff0c;通过端口号来标识和区分一台主机中的不同应用进程&#xff0c;端口号拼接到 IP 地址即构成套接字 Socket。在网络中采用发送方和接收方的套接字来识别端点。套接字&#xff0c;实际上是一个通信端点&#xff0c…

C语言初阶小练习2(三子棋小游戏的实现代码)

这是C语言小游戏三子棋的代码实现 test.c文件是用来测试的部分 game.h文件是用来声明我们说写出的函数 game.c文件是用来编写我们的功能实现函数部分 1.test.c #define _CRT_SECURE_NO_WARNINGS 1 #include"game.h" void menu() {printf("***************…

使用 cmake 在 x86 系统中为 arm 系统交叉编译程序

原理&#xff1a; 在 x86 系统里使用交叉编译工具链&#xff08;arm 版 gcc/g&#xff09;编译程序&#xff0c;然后放在 arm 系统里运行。 arm 版本 使用 lscpu 查看 cpu 架构 版本说明armv732 bitarmv8/arrch6464 bit 安装交叉编译工具链 # 针对 armv7 sudo apt install…

库卡ForceTorqueControl(一)

1. 功能说明 ForceTorqueControl 是一个可后载入的备选软件包&#xff0c;具有下列功能&#xff1a; 执行取决于测得的过程力和力矩的运动 遵守过程力和力矩&#xff0c;不取决于工件的位置和尺寸 遵守加工工件期间复杂的过程力变化 沿着根据测得的过程力编程的轨迹调整速度 通…

MySQL上新:MySQL 9.1.0发布

MySQL 9.1.0 已经于 2024 年 10 月 15 日正式发布。这是一个创新版本&#xff0c;增加了一些新功能、修复了一些问题并且弃用了一些旧功能。 同时发布的还有 MySQL 8.4.3 以及 MySQL 8.0.40。 以下是该版本包含的部分更新。 原子DDL 在该版本之前&#xff0c;虽然 CREATE DAT…

【高分论文密码】AI赋能大尺度空间模拟与不确定性分析及数字制图

随着AI大语言模型的广泛应用&#xff0c;大尺度空间模拟预测与数字制图技术在不确定性分析中的重要性日益凸显。这些技术已经成为撰写高分SCI论文的关键工具&#xff0c;被誉为“高分论文密码”。大尺度模拟技术能够从不同的时空尺度揭示农业生态环境领域的内在机理和时空变化规…