摘要:如果想让枚举类更加的好用,就可以模仿我在实战三中的写法那样,通过某一个参数值,比如参数值,就能获取到其对应的枚举值,然后想要什么值,就什么值就好了。
枚举摘要:本文主要讨论生产环境中枚举类的使用。首先会通过对枚举类概念进行简单的介绍,引入我们讨论的主题;然后就直接进入实战部分,本文只会介绍在实战中用的比较多,也比较常用的情况,所以希望老铁可以用心体会并实践,最终化为己有;最后会大致在对枚举的 API 做了一个简单的介绍。其余没有介绍的内容,基本上在我们的生产环境中极少用到,如果有兴趣的可以自己在深入研究。
概念:枚举类型是 Java 5 中新增特性的一部分,它是一种特殊的数据类型,它的特点就是使我们的代码更加简洁,安全,从某种程度来说,使我们可以站在全局的角度更加清晰的理解业务逻辑(比如说一个订单的状态被我们定义成了枚举类之后,我们不用看业务逻辑代码,只需要从这个枚举类中都可以了解到我们这个订单的所有状态,给我们一种全局观的印象在脑海中,更利于后期代码的梳理。)
定义:首先使用 enum 来定义一个枚举类;然后每个枚举值(即声明的枚举)是使用逗号隔开,如果枚举值后面还有操作代码,那么在最后一个枚举值后面加上分号结尾;最后一定要记住,枚举类中声明的每一个值都是一个实例,也就是说有 n 个枚举值,构造函数就被调用 n 次来创建出 n 个枚举实例。这里举一个小例子看看:
enum SeasonType { SPRING, SUMMER, AUTUMN, WINTER; SeasonType() { System.out.println("看看此构造函数被调用了几次"); } } public class Season { public static void main(String[] args) { System.out.println(SeasonType.SPRING); } }
控制台输出:
看看此构造函数被调用了几次 看看此构造函数被调用了几次 看看此构造函数被调用了几次 看看此构造函数被调用了几次 SPRING
总结: 从这里可以看出来,枚举类中声明的每一枚举值其实都调用了构造函数并创建了实例,简单理解就是: 每一个枚举值都是一个实例对象。
实战一无参(1)定义一个无参枚举类
enum SeasonType { SPRING, SUMMER, AUTUMN, WINTER }
(2)实战中的使用
// 根据实际情况选择下面的用法即可 SeasonType springType = SeasonType.SPRING; // 输出 SPRING String springString = SeasonType.SPRING.toString(); // 输出 SPRING实战二有一参
(1)定义只有一个参数的枚举类
enum SeasonType { // 通过构造函数传递参数并创建实例 SPRING("spring"), SUMMER("summer"), AUTUMN("autumn"), WINTER("winter"); // 定义实例对应的参数 private String msg; // 必写:通过此构造器给枚举值创建实例 SeasonType(String msg) { this.msg = msg; } // 通过此方法可以获取到对应实例的参数值 public String getMsg() { return msg; } }
(2)实战中的使用
// 当我们为某个实例类赋值的时候可使用如下方式 String msg = SeasonType.SPRING.getMsg(); // 输出 spring实战三有两参
(1)定义有两个参数的枚举类
public enum Season { // 通过构造函数传递参数并创建实例 SPRING(1, "spring"), SUMMER(2, "summer"), AUTUMN(3, "autumn"), WINTER(4, "winter"); // 定义实例对应的参数 private Integer key; private String msg; // 必写:通过此构造器给枚举值创建实例 Season(Integer key, String msg) { this.key = key; this.msg = msg; } // 很多情况,我们可能从前端拿到的值是枚举类的 key ,然后就可以通过以下静态方法获取到对应枚举值 public static Season valueofKey(Integer key) { for (Season season : Season.values()) { if (season.key.equals(key)) { return season; } } throw new IllegalArgumentException("No element matches " + key); } // 通过此方法可以获取到对应实例的 key 值 public Integer getKey() { return key; } // 通过此方法可以获取到对应实例的 msg 值 public String getMsg() { return msg; } }
(2)实战中的使用
// 输出 key 为 1 的枚举值实例 Season season = Season.valueofKey(1); // 输出 SPRING 实例对应的 key Integer key = Season.SPRING.getKey(); // 输出 SPRING 实例对应的 msg String msg = Season.SPRING.getMsg();枚举类总结
其实枚举类懂了其概念后,枚举就变得相当简单了,随手就可以写一个枚举类出来。所以如上几个实战小例子一定要先搞清楚概念,然后在练习几遍就 ok 了。重要的概念,我在这里在赘述一遍,帮助老铁们快速掌握这块知识,首先记住,枚举类中的枚举值可以没有参数,也可以有多个参数,每一个枚举值都是一个实例;并且还有一点很重要,就是如果枚举值有 n 个参数,那么构造函数中的参数值肯定有 n 个,因为声明的每一个枚举值都会调用构造函数去创建实例,所以参数一定是一一对应的;既然明白了这一点,那么我们只需要在枚举类中把这 n 个参数定义为 n 个成员变量,然后提供对应的 get() 方法,之后通过实例就可以随意的获取实例中的任意参数值了。如果想让枚举类更加的好用,就可以模仿我在实战三中的写法那样,通过某一个参数值,比如 key 参数值,就能获取到其对应的枚举值,然后想要什么值,就 get 什么值就好了。
枚举 API我们使用 enum 定义的枚举类都是继承 java.lang.Enum 类的,那么就会继承其 API ,常用的 API 如下:
String name()
获取枚举名称
int ordinal()
获取枚举的位置(下标,初始值为 0 )
valueof(String msg)
通过 msg 获取其对应的枚举类型。(比如实战二中的枚举类或其它枚举类都行,只要使用得当都可以使用此方法)
values()
获取枚举类中的所有枚举值(比如在实战三中就使用到了)
欢迎老铁们一起讨论。。。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/70675.html
摘要:结构型模式适配器模式桥接模式装饰模式组合模式外观模式享元模式代理模式。行为型模式模版方法模式命令模式迭代器模式观察者模式中介者模式备忘录模式解释器模式模式状态模式策略模式职责链模式责任链模式访问者模式。 主要版本 更新时间 备注 v1.0 2015-08-01 首次发布 v1.1 2018-03-12 增加新技术知识、完善知识体系 v2.0 2019-02-19 结构...
摘要:百度网盘提取码一面试题熟练掌握是很关键的,大公司不仅仅要求你会使用几个,更多的是要你熟悉源码实现原理,甚至要你知道有哪些不足,怎么改进,还有一些有关的一些算法,设计模式等等。 百度网盘提取码:u6C4 一、java面试题熟练掌握java是很关键的,大公司不仅仅要求你会使用几个api,更多的是要你熟悉源码实现原理,甚...
阅读 2004·2021-11-18 10:02
阅读 2822·2021-09-04 16:41
阅读 1122·2019-08-30 15:55
阅读 1335·2019-08-29 17:27
阅读 1022·2019-08-29 17:12
阅读 2456·2019-08-29 15:38
阅读 2834·2019-08-29 13:02
阅读 2753·2019-08-29 12:29