JAVA中的枚举

代码示例

理论

枚举的行为多态

java 复制代码
public enum MyLockStrategy {
    SKIP_FAST(){
        @Override
        public boolean tryLock(RLock lock, MyLock prop) throws InterruptedException {
            return lock.tryLock(0, prop.leaseTime(), prop.unit());
        }
    },
    FAIL_AFTER_RETRY_TIMEOUT(){
        @Override
        public 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 的枚举看起来像是一组常量,但实际上:

  • 每个枚举值其实是一个 匿名内部类的实例
  • 如果枚举类有抽象方法,那这些枚举值就必须实现这些方法;
  • 所以你在枚举中看到的类似类的写法 { ... },其实是创建了一个该枚举类的匿名子类。
相关推荐
段一凡-华北理工大学12 分钟前
向量数据库实战:选型、调优与落地~系列文章12:文本分块策略实战:chunk_size 怎么选?重叠多少?
开发语言·数据库·后端·oracle·rust·工业智能体·高炉智能化
Ljwuhe21 分钟前
C++——多态
开发语言·c++
心平气和量大福大1 小时前
C#-WPF-Window主窗体
开发语言·c#·wpf
莫逸风2 小时前
【AgentScope 2.0】 0. 学习指南
java·llm·agent·agentscope
从零开始的代码生活_2 小时前
C++ 继承详解:访问控制、对象模型、菱形继承与设计取舍
开发语言·c++·后端·学习·算法
云小逸3 小时前
【C++ 第七阶段:模板、泛型编程与工程综合详解】
开发语言·c++
z123456789863 小时前
2026最新两款AI编程工具深度对比实测
java·数据库·ai编程
GIS阵地3 小时前
QgsSingleBandPseudoColorRenderer 完整详解(QGIS 3.40.13 C++)
开发语言·前端·c++·qt·qgis
yaoxin5211234 小时前
470. Java 反射 - Member 接口与 AccessFlag
java·开发语言·python
groundhappy4 小时前
idalib安装和codex ida-mcp配置
linux·开发语言·python