「这是我参与11月更文挑战的第1天,活动详情查看:2021最后一次更文挑战」
- 备战2022春招或暑期实习,祝大家每天进步亿点点!Day5
- 本篇总结的是 《Java 枚举的正确使用方式》,后续会每日更新~
- 关于《Redis入门到精通》、《并发编程》等知识点可以参考我的往期博客
- 相信自己,越活越坚强,活着就该逢山开路,遇水架桥!生活,你给我压力,我还你奇迹!
1、简介
不知道大家有没有在自己项目中看到过类似下面这样的代码:
1 | arduino复制代码public static void fruitsHandle(String fruits) { |
出现上面这种情况是非常少的,小萌新一般也不会直接在方法中重复定义字符串进行比较,而会将其定义为常量,或者统一抽取为常量类。所以一般会看到这种代码(小捌经常在项目中看到类似这样的代码,但是小捌不敢吭声😄😄):
1 | arduino复制代码private static final String APPLE = "Apple"; |
上面这种情况我们在代码中出现的频率非常高;它需要程序员提供一组固定常量,并且这一组固定常量在开发时或者说编译时就知道了具体的成员,这个时候我们就应该使用枚举。
枚举类型(enum type)是指由一组固定常量组成合法值的类型。
2、优势
使用枚举类型,相比直接定义常量能够带来非常多的好处。
2.1 类型安全
分别定义一个简单的肉类枚举和水果枚举
1 | arduino复制代码// 肉类枚举 |
1 | arduino复制代码// 水果枚举 |
我们改造上面的代码,修改入参类型即可
1 | arduino复制代码public static void fruitsHandle(FruitsEnums fruits) { |
可以看到定义枚举类型带来函数类型安全性,如果定义的是常量则无法代理这种效果
2.2 枚举能够提供更多信息
枚举在本质上还是一个类,它能够定义属性和方法,我们可以在枚举类中定义想要的方法、或者通过属性扩展枚举提供的基础信息。
比如我们做web开发时最常见的HttpStatus,在springframework框架中就被定义成了枚举类,它不仅包含了Http响应码,还能包含描述状态。
1 | arduino复制代码public enum HttpStatus { |
2.3 通过函数提供更多服务
此外HttpStatus它内部还嵌套了Series枚举类,这个类可以协助HttpStatus枚举类,通过statusCode / 100的模判断当前的枚举状态是is1xxInformational、is2xxSuccessful、is3xxRedirection、is4xxClientError、is5xxServerError等等。
1 | java复制代码public static enum Series { |
2.4 获取所有定义的类型
所有的枚举类会自动产生一个values()方法,它能返回当前定义枚举类的数组集,因此可以很方便的遍历怎么枚举类定义的所有枚举。比如我们简单改造一下MeetEnums枚举类:
1 | scss复制代码public enum MeetEnums { |
总之枚举类相比常量来说有太多的优点,它能使得代码更加整洁美观、安全性强、功能强大。虽然大部分情况下,枚举类的选择是由于常量定义的,但是也并不是任何时候都一定要把常量定义成枚举;具体情况大家就可以自己去斟酌啦!
本文转载自: 掘金