当前位置: 首页 > backend >正文

JAVA中的枚举

代码示例

4a654c2bfb8e9426f95966f39e133737.png

2a71206e9711ca58398af344cf3f860d.png

理论

fe34712a4144020c95d785336f4fe843.png

605731de225188da6ad5754aed2b7638.png

f9e7c16dffa04d9ce5cce272274657f4.png

ab3f2fe266ce266c8ed62dd8cfd8aced.png

2f0328ac2ea3213bbd426476b1890e12.png

枚举的行为多态

public enum MyLockStrategy {SKIP_FAST(){@Overridepublic boolean tryLock(RLock lock, MyLock prop) throws InterruptedException {return lock.tryLock(0, prop.leaseTime(), prop.unit());}},FAIL_AFTER_RETRY_TIMEOUT(){@Overridepublic boolean tryLock(RLock lock, MyLock prop) throws InterruptedException {boolean isLock = lock.tryLock(prop.waitTime(), prop.leaseTime(), prop.unit());if (!isLock) {throw new BizIllegalException("请求太频繁");}return true;}},;public abstract boolean tryLock(RLock lock, MyLock prop) throws InterruptedException;
}

为什么可以重写本类的抽象方法

Java 中的枚举本质上是 一种特殊的类(继承自 java.lang.Enum,每一个枚举常量(比如 SKIP_FASTFAIL_FAST)都是该类的一个 实例(对象)

如果你在枚举中声明了 抽象方法,那么:

每一个枚举常量都必须实现这个抽象方法,因为它们都是枚举类的“子类”或“匿名内部类”的形式存在。

这在 Java 中被称为 枚举的“行为多态”能力

这种设计的好处是什么?

  1. 策略模式(Strategy Pattern)
    每个枚举常量代表一种锁的获取策略,调用时可以根据实际需求选择不同策略。

补充说明:枚举和匿名内部类的关系

虽然 Java 的枚举看起来像是一组常量,但实际上:

  • 每个枚举值其实是一个 匿名内部类的实例
  • 如果枚举类有抽象方法,那这些枚举值就必须实现这些方法;
  • 所以你在枚举中看到的类似类的写法 { ... },其实是创建了一个该枚举类的匿名子类。
http://www.xdnf.cn/news/10344.html

相关文章:

  • 《管理经济》期末复习题(2)
  • 缓存穿透、击穿、雪崩的解决方案
  • 开源版 PyMOL 如何绘制 Galidesivir 分子结构 ?
  • [LitCTF 2024]SAS - Serializing Authentication
  • 在Cesium中通过geojson和3d tiles分别加载楼宇白膜
  • 【深度学习】线性因子模型:数据降维与结构解析的数学透镜
  • 深入探讨redis:主从复制
  • 【鱼皮-用户中心】笔记
  • 优化的两极:凸优化与非凸优化的理论、应用与挑战
  • 雪花算法的实际应用
  • 6个月Python学习计划 Day 10 - 模块与标准库入门
  • 表单校验代码和树形结构值传递错误解决
  • 【Qt】Bug:findChildren找不到控件
  • 【C语言练习】074. 理解C语言中的多线程编程
  • MySQL 8.0:解析
  • Github 热点 Github 热点 Syncthing:多台设备,持续同步文件,安全同步,隐私无忧!
  • 79. 单词搜索-极致优化,可行性剪枝和顺序剪枝
  • LeetCode 1010. 总持续时间可被 60 整除的歌曲
  • leetcode hot100刷题日记——30.两数之和
  • 那些常用的运维工具
  • LeetCode 1524. 和为奇数的子数组数目
  • 【题解-洛谷】P9422 [蓝桥杯 2023 国 B] 合并数列
  • Flask-Login使用示例
  • R语言错误处理方法大全
  • Python 从入门到精通视频下载
  • Nacos实战——动态 IP 黑名单过滤
  • 【LLM】FastAPI入门教程
  • 无公网ip远程桌面连接不了怎么办?内网计算机让外网访问方法和问题分析
  • 2. 手写数字预测 gui版
  • VMvare 创建虚拟机 安装CentOS7,配置静态IP地址