java 枚举_Java中枚举类型(Enum)使用进阶

文章前记

程序员工作久了便可能整日忙碌于“增删改查”中,迷失方向,毫无进步。

该公众号致力于分享软件开发相关的原创干货,助你完成从程序员到架构师的进阶之路!

努力!做一个NB的Coder!

本文是Java枚举类型的第三篇文章,对于枚举类型的实现原理和包含的方法特性不了解的小伙伴可以先去参考历史文章中的《Java中的枚举类型(Enum)详解》和《详解Java枚举类型(Enum)中的方法》两篇文章。

接下来,我们将深入了解枚举类的使用。

1 扩展枚举值与自定义构造函数

之前,我们讨论枚举类时,主要是针对最简单的枚举类型。每个枚举值只有一个字符串,如:

fb1c790f4f63b461d3141b3d04839c2f.png

但是实际使用中,我们可能想给每个枚举值赋予更多的含义,例如,给每个季节一个中文说明和编码等。

即实现:

1e1a6316e79fd121e9f46c55203d5c9c.png

那这样的操作是可以的么?答案是肯定的!可以操作。但是,因为最简单的枚举类型调用了默认的构造方法,如果我们要增加新的含义,则需要自己覆盖原来的构造方法。操作如下:

a8c72742d2244fbf81d0ddbba35a6e85.png

我们在枚举类中增加了name/code两个属性,并重新编写了构造方法。实现了我们的要求。

我们编写测试函数:

a76c44df07ed0dda235a34bab92ee880.png

得到如下结果:

9c8384e33efd7688f6eb6c183451fd72.png

2 关于覆盖enum类方法

我们知道,枚举类最终继承了java.lang.Enum抽象类,那么我们能够覆盖java.lang.Enum抽象类中的方法么?

这个当然是可以的。其实在上面的代码中,笔者已经覆盖了java.lang.Enum抽象类中的toString()方法,并得出了自定义的输出。

3 枚举类中定义抽象方法

既然编译器最终将每个枚举值声明为枚举类的实例,那我们能在枚举类中声明抽象方法让枚举值去实现么?

听起来有些不可思议,其实也是可以的。我们在枚举类Season中声明了一个抽象方法sayHello()。然后在创建枚举值时,就必须实现该抽象方法。最终的代码如下:

a60098e1a8a65cce4d57f2a85e1accb0.png

然后运行以下测试代码:

fbe56037a75bebb246b34c265dc83b6d.png

得到输出:

9c82ce03467abe0c5d57d9c8e55c4a0e.png

4 总结

通过这篇文章,我们知道在扩展了构造方法的情况下,我们可以为每个枚举值注入更多的属性。并且,枚举类作为java.lang.Enum抽象类的子类,可以重写父类的方法。同时,每个枚举值作为枚举对象的实例,可以实现枚举对象中定义的抽象方法。

最终,通过《Java中的枚举类型(Enum)详解》《详解Java枚举类型(Enum)中的方法》和本文,我们从原理、特性、使用三个方面对枚举类型进行详细的介绍,该系列到此结束。

大家有相关的问题需要讨论,可以留言互动。


—END—

分享让你从程序员进阶架构师的原创干货!

欢迎关注我们,不错过每期的原创干货!


▼往期精彩文章▼

Java中的枚举类型(Enum)详解

详解Java枚举类型(Enum)中的方法

Java为何能将读与写封装为一个原子操作

Java原子化读并且写操作中存在的问题

漫谈MCU与PLC

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值