Java中Enum枚举类型在项目中应用

news2025/1/12 6:10:27

1、什么是枚举类型?

1、枚举的本质就是穷举法,将可能会出现的情况,都列举出来,然后在列举的情况中调用。

2、枚举与class类似,也可以定义属性,构造方法,有gettersetter方法。

3、枚举类型对象的值之间比较可以通过==比较,当然也可以通过equals比较。

4枚举类型是线程安全的,只会装载一次。

5、使用枚举类型优化if-else

2、枚举类型基本应用?

2.1、创建基本枚举类

public enum MyColors {
	RED, BLUE, WHITE,GREEN 
}

2.1.1、枚举类型的基本调用

通过枚举打点直接获取

public static void main(String[] args) {
		System.out.println(MyColors.YELLOW);
}

2.1.2、switch中调用枚举

MyColors color = MyColors.RED;  
switch (color) {  
    case RED:   System.out.println("==red==");break;  
    case BLUE:  System.out.println("==yellow==");break;  
    case GREEN: System.out.println("==green==");break;  
}

2.1.3、循环基本枚举类型

public static void main(String[] args) {
	for (MyColors color : MyColors.values()) {
       System.out.println(color.ordinal()+"<==序数  值==>"+color);
    }
}

2.2、在枚举类型中定义方法

通过方法可以为成员属性指定特定的行为,如PARAM_ERROR表示参数错误。

2.2.1、在枚举类型中定义方法

说明1定义了两个参数code和message。

说明2需要给code和message定义set和get方法及有参构造器。

//订单状态枚举类型
public enum OrderStatus{
	PARAM_ERROR(1, "参数错误"),
    CART_EMPTY(2, "购物车为空"),
    ORDER_NOT_EXIST(3, "订单不存在");
	
    private Integer code;
    private String message;
    //构造器
	private OrderStatus(Integer code, String message) {
		this.code = code;
		this.message = message;
	}
	public Integer getCode() {
		return code;
	}
	public void setCode(Integer code) {
		this.code = code;
	}
	public String getMessage() {
		return message;
	}
	public void setMessage(String message) {
		this.message = message;
	}   
}

2.2.1、使用带方法的枚举类型

public static void main(String[] args) {		
		System.out.println(OrderStatus.ORDER_NOT_EXIST);
		System.out.println(OrderStatus.ORDER_NOT_EXIST.getCode());
		System.out.println(OrderStatus.ORDER_NOT_EXIST.getMessage());
	}

结果输出:

2.2.3、循环带方法的枚举类

public static void main(String[] args) {
		for (OrderStatus status : OrderStatus.values()) {
            System.out.print("状态值=>"+status.name());
            System.out.print(" 状态序列=>"+status.ordinal());
            System.out.print(" 状态码=>"+status.getCode());
            System.out.println(" 状态信息=>"+status.getMessage());
		}
	}

2.3、在接口中使用枚举类型

有时候在项目中创建的枚举类型可能会非常的多,我们可以使用枚举类型将同类型的枚举类放置在一块进行管理。

2.3.1、在接口中定义枚举类型

//订单枚举类型
public interface OrderEnum {  
	//订单状态枚举类
    enum OrderStatus implements OrderEnum{  
    	    //订单错误,订单成功,订单不存在
        ORDER_ERROR,ORDER_SUCCESS,ORDER_NOT_EXIST;  
    }  
    //订单类型枚举类
    enum OrderType implements OrderEnum{
      	//电子,食品,书籍
    	    ELECTRON,FOOD,BOOKS;
    }  
}

2.4、EnumMap的使用

通过EnumMap可以为枚举的成员属性赋予特定的行为,功能与在枚举类型中定义方法相似。

2.4.1、创建枚举类

public enum MyColors {
	RED, GREEN, BLANK, YELLOW 
}

2.4.2、创建测试类

public static void main(String[] args) {
		//使用
		EnumMap<MyColors, String> enumMap = new EnumMap<>(MyColors.class);
		enumMap.put(MyColors.RED,"红色");
		enumMap.put(MyColors.BLANK,"黑色");
		enumMap.put(MyColors.GREEN,"绿色");

		String result = enumMap.get(MyColors.RED);
		System.out.println("result==>"+result);
}
输出结果:result==>红色

2.5、EnumSet的使用

EnumSet可以获取当前的枚举中有那些成员属性

2.5.1、创建枚举类

public enum MyColors {
	RED, GREEN, BLANK, YELLOW 
}

2.5.2、创建测试类

//EnumSet导包路径  import java.util.EnumSet;

EnumSet enumSet=EnumSet.allOf(MyColors.class);
		System.out.print(enumSet+"  ");
}
//输出结果:[RED, GREEN, BLANK, YELLOW] 

3、项目使用-枚举优化if-else用法

3.1、使用if-else用法

这种用法的不好之处在于,可读性不高

        String orderStatus="PAYED";
		if(orderStatus.equals("PAYED")){
			System.out.println("====已支付====");
		}else if(orderStatus.equals("SHIPPED")){
			System.out.println("====已发货====");
		}else if(orderStatus.equals("ARRIVED")){
			System.out.println("====已到达====");
		}else if(orderStatus.equals("SIGNEDFOR")){
			System.out.println("====已签收====");
		}else{
			System.out.println("====已取消====");
		}

3.2、优化使用1-创建接口

public interface OrderProcessInterface {
	//通过订单状态,返回不同的结果
	public String orderStatus(String status);
}

3.3、优化使用2-创建枚举类型实现接口

//订单进度
public enum OrderProcessEnum implements OrderProcessInterface{
	/**
	 * PAYED:已支付,SHIPPED:已发货
     * ARRIVED:已到达,SIGNEDFOR:已签收
     * CANCELLATION:已取消
	 */
	PAYED{
		@Override
		public String orderStatus(String status) {
			// TODO Auto-generated method stub
			return "PAYED-已支付";
		}
	},
	SHIPPED{
		@Override
		public String orderStatus(String status) {
			// TODO Auto-generated method stub
			return "PAYED-已签收";
		}
	},
	ARRIVED{
		@Override
		public String orderStatus(String status) {
			// TODO Auto-generated method stub
			return "PAYED-已达到";
		}
	},
	SIGNEDFOR{
		@Override
		public String orderStatus(String status) {
			// TODO Auto-generated method stub
			return "PAYED-已签收";
		}
	},
	CANCELLATION{
		@Override
		public String orderStatus(String status) {
			// TODO Auto-generated method stub
			return "PAYED-已取消";
		}
	}
}

3.4、优化使用3-测试枚举类型

public static void main(String[] args) {
		String orderStatus="PAYED";
		String status = OrderProcessEnum.valueOf(orderStatus).orderStatus(orderStatus);
		System.out.println(status);
}
//返回值: PAYED-已支付

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

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

相关文章

<MySQL> MySQL表数据的 CRUD 基础操作 —— 增(Create)、查(Retrieve)、改(Update)、删(Delete)

目录 一、CRUD 二、增加&#xff08;Create&#xff09; 2.1 新增插入数据 insert 2.2 操作演示 2.3 多行插入更高效 2.4 插入时间类型的数据 2.5 使用“库函数” 三、查询&#xff08;Retrieve&#xff09; 四、修改&#xff08;Update&#xff09; 4.1 修改数据 …

FTP、NFS、SAMBA系统服务一

一、rsync托管xinetd 1、为什么要进行服务托管 独立服务&#xff1a;独立启动脚本 ssh ftp nfs dns ... 依赖服务: 没有独立的启动脚本 rsync telnet 依赖xinetd服务&#xff08;独立服务&#xff09; 2、如何将rsync托管给xinetd服务去管理&#xff1f; 第一步&#xff1…

NSSCTF-Crypto入门题 练习记录贴 ‘‘一‘‘

文章目录 前言001[鹤城杯 2021]easy_crypto002[强网拟态 2021]拟态签到题003[SWPUCTF 2021 新生赛]crypto8004[SWPUCTF 2021 新生赛]crypto7005[SWPUCTF 2021 新生赛]crypto6006[SWPUCTF 2021 新生赛]ez_caesar007[SWPUCTF 2021 新生赛]crypto10008[鹤城杯 2021]A_CRYPTO009[SW…

SAM + YOLO 智能抠图

在计算机视觉领域&#xff0c;对象检测和实例分割是使机器能够理解视觉数据并与之交互的关键任务。 准确识别和隔离图像中的物体的能力具有许多实际应用&#xff0c;从自动驾驶车辆到医学成像。 在这篇博文中&#xff0c;我们将探索如何在 Roboflow 和 Ultralytics YOLOv8 的帮…

Linux C 时间编程

时间编程 Linux中时间相关命令时间编程time  获取当前的时间gmtime  获取当前日期时间localtime  获取本地时间日期asctime  规格时间结构体为字符串 Linux中时间相关命令 1&#xff09;date&#xff1a;打印当前的系统时间。 2&#xff09;date -s 20231111&#xff…

C#,数值计算——函数计算,Eulsum的计算方法与源程序

1 文本格式 using System; namespace Legalsoft.Truffer { public class Eulsum { private double[] wksp { get; set; } private int n { get; set; } private int ncv { get; set; } public bool cnvgd { get; set; } pri…

openEuler编译安装nmon性能监控工具及可视化分析工具

ln 介绍 nmon&#xff08;short for Nigel’s Monitor&#xff09;是一个性能分析工具&#xff0c;由蓝色巨人IBM开发&#xff0c;最早用于自家操作系统UNIX&#xff0c;AIX &#xff08;Advanced Interactive eXecutive&#xff09;。现在也能用在Linux上。它可以显示系统的…

跨域:利用JSONP、WebSocket实现跨域访问

跨域基础知识点&#xff1a;跨域知识点 iframe实现跨域的四种方式&#xff1a;http://t.csdnimg.cn/emgFr 注&#xff1a;本篇中使用到的虚拟主机也是上面iframe中配置的 目录 JSONP跨域 JSONP介绍 跨域实验&#xff1a; WebSocket跨域 websocket介绍 跨域实验 JSONP跨域…

JavaWeb Day09 Mybatis-基础操作02-XML映射文件动态SQL

目录 Mybatis动态SQL介绍​编辑 一、案例 ①Mapper层 ②测试类 ③EmpMapper.xml ④结果​ 二、标签 &#xff08;一&#xff09;if where标签 ​①EmpMapper.xml ②案例 ③总结 &#xff08;二&#xff09;foreach标签 ①SQL语句 ②Mapper层 ③EmpMapper.xml ④…

基于GPTs个性化定制SCI论文专业翻译器

1. 什么是GPTs GPTs是OpenAI在2023年11月6日开发者大会上发布的重要功能更新&#xff0c;允许用户根据特定需求定制自己的ChatGPT模型。 Introducing GPTs 官方介绍页面https://openai.com/blog/introducing-gpts 在原有自定义ChatGPT的流程中&#xff0c;首先需要自己编制p…

HuggingFace模型头的自定义

在线工具推荐&#xff1a; Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器 在本文中我们将介绍如何使HuggingFace的模型适应你的任务&#xff0c;在Pytorch中建立自定义模型头并将其连接到HF模型的主体&#…

2023数据安全战场回顾:迅软科技助您稳固阵线

随着各行业的数字化转型不断深入&#xff0c;数据安全逐步进入法制化的强监管时代。然而&#xff0c;由于人为攻击、技术漏洞和监管缺位等原因&#xff0c;各种数据泄露事件频繁发生&#xff0c;企业数据安全威胁日益严峻。 以下是我对2023年第三季度安全事件的总结&#xff0c…

Maven Profile组设置

application.properties中xxxx

JS实现数据结构与算法

队列 1、普通队列 利用数组push和shif 就可以简单实现 2、利用链表的方式实现队列 class MyQueue {constructor(){this.head nullthis.tail nullthis.length 0}add(value){let node {value}if(this.length 0){this.head nodethis.tail node}else{this.tail.next no…

hosts文件地址

Hosts是一个没有扩展名的系统文件&#xff0c;可以用记事本等工具打开&#xff0c;其作用就是将一些常用的网址域名与其对应的IP地址建立一个关联“数据库”&#xff0c;当用户在浏览器中输入一个需要登录的网址时&#xff0c;系统会首先自动从Hosts文件中寻找对应的IP地址&…

Typescript -尚硅谷

基础 1.ts是以js为基础构建的语言&#xff0c;是一个js的超集(对js进行了扩展)&#xff1b; 2.ts(type)最主要的功能是在js的基础上引入了类型的概念; Js的类型是只针对于值而言&#xff0c;ts的类型是针对于变量而言 Ts可以被编译成任意版本的js&#xff0c;从而进一步解决了…

企业邮箱本地私有化部署解决方案

随着互联网化进程不断深入&#xff0c;加快推进企业信息化系统建设&#xff0c;已经成为提高企业核心竞争力的重要途径。企业对企业邮箱系统的需求越来越大&#xff0c;企业邮箱系统作为企业级通讯工具中的利器&#xff0c;在协同办公和内外业务交流上发挥着无可替代的巨大作用…

LLM代码生成器的挑战【GDELT早期观察】

越来越多的研究开始对LLM大模型生成的代码的质量提出质疑&#xff0c;尽管科技行业不断推出越来越多的旨在增强甚至取代人类编码员的工具。 随着我们&#xff08;GDELT&#xff09;继续探索和评估越来越多的此类工具&#xff0c;以下是我们的一些早期观察结果。 在线工具推荐&a…

将复数中的虚部取反 即对复数求共轭 numpy.conjugate()

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 将复数中的虚部取反 即对复数求共轭 numpy.conjugate() [太阳]选择题 请问以下代码中执行语句输出结果是&#xff1f; import numpy as np a np.array([1 2j, 3 - 4j]) print("【显示…

Linux学习教程(第二章 Linux系统安装)1

第二章 Linux系统安装 学习 Linux&#xff0c;首先要学会搭建 Linux 系统环境&#xff0c;也就是学会在你的电脑上安装 Linux 系统。 很多初学者对 Linux 望而生畏&#xff0c;多数是因为对 Linux 系统安装的恐惧&#xff0c;害怕破坏电脑本身的系统&#xff0c;害怕硬盘数据…