快捷搜索:  汽车  科技

java枚举高级用法(java里枚举非常实用的3个方法)

java枚举高级用法(java里枚举非常实用的3个方法)枚举也就一个类,当然也能有方法values()返回的是枚举值的数组,非常实用知道枚举了,怎么遍历枚举里面所有值了?用枚举的values()方法业务场景:当你需要把所有状态(枚举值),带到后端去查询SQL时,你就不要一个个去赋值啦

面试

面试问枚举的真的很少,但实际开发中多用枚举可以大大提高代码优雅度和安全度

基础知识准备

枚举、

Enum源码分析

通过源码我们来复习下枚举特性

java枚举高级用法(java里枚举非常实用的3个方法)(1)

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

java枚举高级用法(java里枚举非常实用的3个方法)(2)

例子

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

java枚举高级用法(java里枚举非常实用的3个方法)(3)

java枚举高级用法(java里枚举非常实用的3个方法)(4)

java枚举高级用法(java里枚举非常实用的3个方法)(5)

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

java枚举高级用法(java里枚举非常实用的3个方法)(6)

values()

知道枚举了,怎么遍历枚举里面所有值了?

用枚举的values()方法

业务场景:当你需要把所有状态(枚举值),带到后端去查询SQL时,你就不要一个个去赋值啦

java枚举高级用法(java里枚举非常实用的3个方法)(7)

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

java枚举高级用法(java里枚举非常实用的3个方法)(8)

枚举方法
  1. 枚举类方法
  2. 枚举值的方法

枚举也就一个类,当然也能有方法

如上面例子就提供了一个通过code找枚举值的方法(枚举类方法

java枚举高级用法(java里枚举非常实用的3个方法)(9)

枚举值的方法(枚举值的方法

必须通过枚举具体值调用

上面例子的

枚举值一般都需要提供code、desc属性及对应get方法

java枚举高级用法(java里枚举非常实用的3个方法)(10)

枚举相等

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

java枚举高级用法(java里枚举非常实用的3个方法)(11)

枚举是不能被clone的

请见下面源码

java枚举高级用法(java里枚举非常实用的3个方法)(12)

阻止默认反序列化

请见下面源码

java枚举高级用法(java里枚举非常实用的3个方法)(13)

枚举的构造方法

参数名称、序数

java枚举高级用法(java里枚举非常实用的3个方法)(14)

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

java枚举高级用法(java里枚举非常实用的3个方法)(15)

业务场景:在讲下实际应用,当前端有下拉框什么类型值等,就可以后端定义相应的枚举类,

一个枚举类对应一个下来框,这样业务属性增加,前端不用改后端只用增加枚举值就好了,扩展维护很方便,顺序也可以灵活控制(完美)

java枚举高级用法(java里枚举非常实用的3个方法)(16)

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

java枚举高级用法(java里枚举非常实用的3个方法)(17)

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

猜您喜欢: