深入学习java枚举的应用
作者:laozhang 发布时间:2022-10-27 19:56:34
一.枚举和静态常量区别
讲到枚举我们首先思考,它和public static final String 修饰的常量有什么不同。
我举枚举的两个优点:
1. 保证了类型安全:调用者无法随意传一个 int或者String 等值;
2.代码可读性非常高;
举个例子:
在实际编程中,往往存在着这样的“数据集”,它们的数值在程序中是稳定的,而且“数据集”中的元素是有限的。例如春夏秋冬四个数据元素组成了四季的“数据集”。
你写了方法get(String season),输入的类型只能是String类型,同时要String只能是(春、夏。秋。冬)。
这个时候。你写四个字符串常量
public class Common { public static final String SPRING="春"; public static final String SEASON="夏"; public static final String SUMMER="秋"; public static final String AUTUMN="冬";}
在get方法里放入get(Common.SEASON),确实是把"春",放进去了,但是这个时候你会发现这里面有一个隐患,你get(String season),毕竟放入的是String类型的,如果新同事或者不知情的同事,不知道这个方法里只能放“春、夏、秋、冬”,它放了个其期它字符串比如get("小小“),这个时候,在编译期它是不会报错的,只有运行之后,才发现错了。
为了防止上面的隐患,枚举出现了
public enum Season { SPRING("春"), SUMMER("夏"), AUTUMN("秋"), WINTER("冬"); .....}
这个时候,我们修改get方法的传参,改成get(Season season) 这个时候加入get(Season.SPRING),这就能保证传入的参数只能是这几个。
二.理解枚举
首要我们要明确,其实枚举也是个class类,我写个枚举来理解。
//我们把枚举当做一个普通类public enum Season { SPRING(1,"春"), SUMMER(2,"夏" ), AUTUMN(3,"秋" ), WINTER(4,"冬"); //这里最后一个一定要分号,否则报错 /*我们可以理解成 *public static final Season SPRING = new Season(1,春); *public static final Season SUMMER = new Season(2,夏); *public static final Season AUTUMN = new Season(3,秋); *public static final Season WINTER = new Season(4,冬); *既然是对象,那下面就很好理解了 */ /* * 1.上面对象里放了两个参数,那下面就肯定要有这个类型的构造函数 * 2.这里是private,因为不能在被new对象了 */ private Season(int code,String name) { this.name = name; this.code = code; } //对象的属性 private String name; private int code; //获取对象属性的方法 public String getName() { return this.name; } public String getCode() { return this.name; } //通过code获得对象,我们就可以获得对象的其它属性 public static Season decode(int code) { Season season = null; for (Season type : Season.values()) { if (type.code==code) { season = type; break; } } return season; } //重新toString方法 public String toString() { return this.name; }}
上面这个例子,就很好解释了枚举,它和普通类没什么区别,只是用另一种写法创建了几个有属性的对象,这也必须写这样有属性的构造函数,仅此而已。
这里顺便列举下枚举的一些特点:
1.它不能有public的构造函数,这样做可以保证客户代码没有办法新建一个enum的实例。
2. 枚举不能在继承其它类了,因为它默认继承了java.lang.Enum
3. 常量值地址唯一,可以用==直接对比,性能会有提高.
4.Enum还提供了values方法,这个方法使你能够方便的遍历所有的枚举值。
5.Enum还有一个oridinal的方法,这个方法返回枚举值在枚举类种的顺序,这个顺序根据枚举值声明的顺序而定。
三.枚举的常见用法
第一种:switch运用
先建一个枚举:
public enum Common { INSERT, MODIFY, DELETE}//因为这里是无参的对象,所以可以用系统默认的构造函数。也不用写属性和方法。
在写实现代码
public class CommonUtils { public static void getType(Common common){ Common c=common; switch(c) { case INSERT: System.out.println("进行插入操作"); break; case MODIFY: System.out.println("进行修改操作"); break; case DELETE: System.out.println("进行删除操作"); break; } } public static void main(String[] args) { getType(Common.DELETE); //后台输出:进行删除操作 }}
第二种用法,通过key值获得value值获取其它值
枚举类
public enum Season { SPRING(1,"春","春天放风筝"), SUMMER(2,"夏","夏天去游泳"), AUTUMN(3,"秋","秋天去秋游"), WINTER(4,"冬","冬天吃火锅"); private Season(int code,String name,String bz) { this.code = code; this.name = name; this.bz=bz; } private int code; private String name; private String bz; public static Season decode(int code) { Season season = null; for (Season type : Season.values()) { if (type.code==code) { season = type; break; } } return season; } public int getCode() { return code; } public String getName() { return name; } public String getBz() { return bz; }}
测试类
好了,就写这么多,以后有需要会更深入了解。感谢大家对脚本之家的支持。
来源:https://www.cnblogs.com/qdhxhz/p/8337514.html


猜你喜欢
- 效果图如下:类注释:方法注释:idea不会默认帮我们设置,所以需要手动设置。1:IDEA中在创建类时会自动给添加注释打开idea,操作Fil
- 1. 对图片本身进行操作尽量不要使用 setImageBitmap、setImageResource、 BitmapFactory.deco
- 当数据库中数据条数过多时,一个页面就不能显示,这是要设置分页查询,首先要使用的是数据库sql语句的limit条件实现分组查询sql语句大概形
- 1. 定义在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。2. 使用的
- 本文主要介绍了SpringBoot配置文件中的明文密码如何加密保存,读取以及对于自定义的加密算法加密的参数如何保存和读取。背景为了安全的需要
- 摘要在生产环境下,我们需要关闭swagger配置,避免暴露接口的这种危险行为。方法禁用方法1:使用注解 @Value() 推荐使用packa
- 1、为什么需要自定义ViewAndroid系统内置的View不满足我们的业务需求2、自定义View的基本方法onMeasure:决定着Vie
- 这里我们通过Apache Commons CLI来完成目标功能,废话不多说直接上代码所需的maven依赖<dependency>
- 本文实例为大家分享了OpenCV实现人脸识别程序的具体代码,供大家参考,具体内容如下//Haar特征检测,人脸识别算法,是用xml作为训练后
- 在上个星期阿里巴巴一面的时候,最后面试官问我如何把一篇文章中重复出现的词或者句子找出来,当时太紧张,答的不是很好。今天有时间再来亲手实现一遍
- 引言其实对于分库分表这块的场景,目前市场上有很多成熟的开源中间件,eg:MyCAT,Cobar,sharding-JDBC等。本文主要是介绍
- 1.break 关键字break 主要用在:① 循环语句中② switch语句中它的作用:用来跳出整个语句块。1.1语法break 的用法很
- **正所谓,一入商城深似海~ 商城类的App,确实是有许多东西值得学习,但是只要略微斟酌一下,你又会发现,它们之间存在着许多不谋而合的相似,
- gRPCgRPC是由 google开发的一个高性能、通用的开源RPC框架,主要面向移动应用开发且基于HTTP/2协议标准而设计,同时支持大多
- 前言话不多说,直接上图:笔者使用 RecyclerView 的 ItemTouchHelper 来实现这个效果,过程非常简单。为了学习,这里
- Controller代码package com.keafmd.controller;import org.springframework.w
- 复合语句Java的复合语句是以整个区块为单位的语句,由{}以及{}内包含的内容组成对于复合语句来说,复合语句创建了一个局部变量的作用域,该作
- 本文为大家讲解了Struts2框架的入门知识,供大家参考,具体内容如下1、Struts2框架介绍Struts2框架是MVC流程框架,适合分层
- 引言翻译自:towardsdev.com/mastering-e…Kotlin 作为现代的、强大的编程语言,可以给开发
- @RequestBody出现400 Bad Request的问题今天与同事调试一个接口,发现后台使用@RequestBody老是获取不到数据