面试
面试问枚举的真的很少,但实际开发中多用枚举可以大大提高代码优雅度和安全度
基础知识准备
枚举、
Enum 源码分析
通过源码我们来复习下枚举特性

- 不会看源码的程序员是 码农 (扎心了)

例子
通过例子来复习下,枚举那些方法那些特性吧



枚举基类
- 它是一个可以排序、可以 序列化 的
- jdk1.5才开始支持

values()
知道枚举了,怎么遍历枚举里面所有值了?
用枚举的values()方法
业务场景:当你需要把所有状态( 枚举值 ),带到后端去查询SQL时,你就不要一个个去赋值啦

values()返回的是枚举值的数组,非常实用

枚举方法
- 枚举类方法
- 枚举值的方法
枚举也就一个类,当然也能有方法
如上面例子就提供了一个通过code找枚举值的方法( 枚举类方法 )

枚举值的方法( 枚举值的方法 )
必须通过枚举具体值调用
上面例子的
枚举值一般都需要提供code、desc属性及对应get方法

枚举相等
枚举源码里==和equals是一样的,所有实际开发中==可以用的

枚举是不能被clone的
请见下面源码

阻止默认反序列化
请见下面源码

枚举的 构造方法
参数名称、 序数

你如果想把银联排序第一,只用在枚举类中定义的顺序调整下就好

业务场景 :在讲下实际应用,当前端有下拉框什么类型值等,就可以后端定义相应的枚举类,
一个枚举类对应一个下来框,这样业务属性增加,前端不用改后端只用增加枚举值就好了,扩展维护很方便,顺序也可以灵活控制(完美)

不能反射创建枚举
- java.lang.reflect下的 Constructor 源码,异常描述很清楚

总结
- 枚举是在 JVM 层保证完美单例
- 枚举特性不是特别多,大家好好记住这些
- java程序员 利用枚举写出高逼格优雅代码可以有