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

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-已支付

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

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

相关文章

改进YOLOv8:结合ICCV2023|动态蛇形卷积,构建不规则目标识别网络

🔥🔥🔥 提升多尺度、不规则目标检测,创新提升 🔥🔥🔥 🔥🔥🔥 捕捉图像特征和处理复杂图像特征 🔥🔥🔥 👉👉👉: 本专栏包含大量的新设计的创新想法,包含详细的代码和说明,具备有效的创新组合,可以有效应用到改进创新当中 👉👉👉: �…

基于FPGA的PS端的Si5340的控制

1、功能 Si5340/41-D可以输出任意频率&#xff0c;当然有范围&#xff0c;100Hz1GHz。外部输入为24M或者4854M的XTAL&#xff0c;VCO在13500~14256Mhz之间&#xff0c;控制接口采用IIC或者SPI。 芯片架构图 2、IIC控制方式 3、直接上控制代码 使用米联客ZU3EG&#xff0c;将…

spider-node-初识

spider-node spider想解决的问题1&#xff1a;业务架构层面2&#xff1a;代码层面3&#xff1a;业务&#xff0c;产品&#xff0c;研发&#xff0c;测试之间4: 系统迭代成本高 spider-node 配置讲解spider-node启动 spider想解决的问题 1&#xff1a;业务架构层面 帮助研发团队…

C++学习笔记(一):安装VisualStudio和Vcpkg

VisualStudio安装 error C4996: ‘scanf’: This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. #include <stdio.h>int main() {printf("hello"…

如何使用pngPackerGUI_V2.0,将png图片打包成plist的工具

pngPackerGUI_V2.0&#xff0c;此软件是在pngpacker_V1.1软件基础之后&#xff0c;开发的界面化操作软件&#xff0c;方便不太懂命令行的小白快捷上手使用。 具体的使用步骤如下&#xff1a; 1.下载并解压缩软件&#xff0c;得到如下目录&#xff0c;双击打开 pngPackerGUI.e…

iPhone或在2024开放第三方应用商店。

iPhone或开放第三方应用商店&#xff0c;可以说这是一个老生常谈的话题。对于像是iOS这样封闭的系统来说&#xff0c;此前传出苹果可能开放侧载消息的时候&#xff0c;又有谁能信&#xff0c;谁会信&#xff1f; 如果是按照苹果自身的意愿&#xff0c;这种事情自然是不可能发生…

Windows下Python及Anaconda的安装与设置、代码执行之保姆指南

学习Python编程需要安装基本的开发环境。 &#xff08;1&#xff09;python ——编译器&#xff1b;这个是任何语言都需要的&#xff1b;必需&#xff01; &#xff08;2&#xff09;Anaconda ——主要的辅助工具&#xff0c;号称是 Python‘OS&#xff1b;必需&#xff01; …

LeetCode | 234. 回文链表

LeetCode | 234. 回文链表 O链接 这里的解法是先找到中间结点然后再将中间节点后面的节点逆序一下然后再从头开始和从中间开始挨个比较如果中间开始的指针到走最后都相等&#xff0c;就返回true&#xff0c;否则返回false 代码如下&#xff1a; struct ListNode* reverseLis…

杂记杂记杂记

目录 Mybatis分页插件原理&#xff1f; ThreadLocal? 树形表的标记字段是什么&#xff1f;如何查询MySQL树形表&#xff1f; Mybatis的ResultType和ResultMap的区别&#xff1f; #{}和${}有什么区别&#xff1f; 系统如何处理异常&#xff1f; Mybatis分页插件原理&#…

PostMan授权认证使用

Authorization 对于很多应用&#xff0c;出于安全考虑我们的接口并不希望对外公开。这个时候就需要使用授权(Authorization)机制。 授权过程验证您是否具有访问服务器所需数据的权限。 当发送请求时&#xff0c;通常必须包含参数&#xff0c;以确保请求具有访问和返回所需数据…

Linux环境搭建和基础指令(一)

&#x1f396;️&#x1f396;️&#x1f396;️&#x1f396;️&#x1f396;️&#x1f396;️&#x1f396;️&#x1f396;️&#x1f396;️&#x1f396;️&#x1f396;️&#x1f396;️&#x1f396;️&#x1f396;️&#x1f396;️&#x1f396;️&#x1f396;️&…

论文笔记:SimiDTR: Deep Trajectory Recovery with Enhanced Trajectory Similarity

DASFFA 2023 1 intro 1.1 背景 由于设备和环境的限制&#xff08;设备故障&#xff0c;信号缺失&#xff09;&#xff0c;许多轨迹以低采样率记录&#xff0c;或者存在缺失的位置&#xff0c;称为不完整轨迹 恢复不完整轨迹的缺失空间-时间点并降低它们的不确定性是非常重要…

Unity中【UniTask异步流程】如何进行【步骤分段】、【步骤撤销】、【步骤跳转】、【取消异步任务】

一、UniTask和Task UniTask是Unity中的Task实现&#xff0c;Task是C#中实现异步操作的一个模块(类)。UniTask与Task有着同样的使用思路&#xff08;使用习惯&#xff0c;常用API等&#xff09;&#xff0c;可以说UniTask是借鉴Task而开发出来的。 二、需求的来源 以前有一个…

Maven内网开发使用离线仓库

Maven内网开发使用离线仓库 离线或者内网环境开发与外网不通&#xff0c;中央仓库连不上&#xff0c;使用 Maven 管理项目会遇到很多问题。 比如&#xff1a;依赖包缺失&#xff0c;内网的Nexus私服的包老旧&#xff0c;很久没有维护&#xff0c;项目无法运行打包&#xff0c;…

PDF Expert for mac(专业pdf编辑器)苹果电脑

PDF Expert for Mac 是一款功能强大、界面简洁的PDF阅读、编辑和转换工具&#xff0c;为Mac用户提供了全面而便捷的PDF处理体验。无论是日常工作中的文档阅读、标注&#xff0c;还是专业需求下的编辑、转换&#xff0c;PDF Expert 都能满足您的各种需求。 首先&#xff0c;PDF…

UWB人员定位系统的原理与应用

uwb定位技术源码 uwb高精度定位系统源码 uwb人员定位系统基于什么原理&#xff1f; UWB人员定位系统基于超宽带(Ultra WideBand)技术进行位置定位。它利用超短脉冲信号&#xff0c;通过测量信号的到达时间差和信号强度等信息&#xff0c;实现对目标位置的定位。UWB技术具有高…

由于找不到dll无法执行代码的解决方法,深度解析5个dll修复方法

在使用计算机的过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中之一就是“找不到dll无法执行代码”。这个错误通常发生在程序运行时&#xff0c;系统无法找到所需的动态链接库&#xff08;DLL&#xff09;文件。这个问题可能由多种原因引起&#xff0c;包括缺少…

C/C++数据结构之链表题目答案与解析

个人主页&#xff1a;点我进入主页 专栏分类&#xff1a;C语言初阶 C语言程序设计————KTV C语言小游戏 C语言进阶 C语言刷题 数据结构初阶 欢迎大家点赞&#xff0c;评论&#xff0c;收藏。 一起努力&#xff0c;一起奔赴大厂。 目录 1.前言 2.题目…

Redis的三种特殊数据类型

文章目录 一、Redis geospatial 地理位置二、Redis Hyperloglog 基数统计的算法三、Redis Bitmaps 位存储&#xff08;0、1&#xff09;总结 一、Redis geospatial 地理位置 1.geoadd&#xff1a;将指定的地理空间位置&#xff08;纬度、经度、名称&#xff09;添加到指定的ke…

12. 定时器按键消抖

12. 定时器按键消抖 定时器按键消抖简介定时器消抖配置步骤程序编写bsp_keyfilter.hbsp_keyfilter.cmain 定时器按键消抖简介 使用延时函数消抖会浪费 CPU 性能&#xff0c;因为延时函数就是空跑。如果按键是使用中断的方式实现的&#xff0c;就更不能在中断服务函数中使用延时…