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_FAST、FAIL_FAST)都是该类的一个 实例(对象)。

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

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

这在 Java 中被称为 枚举的"行为多态"能力。

这种设计的好处是什么?

  1. 策略模式(Strategy Pattern)

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

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

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

  • 每个枚举值其实是一个 匿名内部类的实例;
  • 如果枚举类有抽象方法,那这些枚举值就必须实现这些方法;
  • 所以你在枚举中看到的类似类的写法 { ... },其实是创建了一个该枚举类的匿名子类。
相关推荐
我是人✓1 小时前
Java核心语法:作用域、循环与大数值处理
java·开发语言·后端
敲代码的乔帮主1 小时前
Python 3 现代类型标注入门
开发语言·python
夜之眷属2 小时前
PriorityQueue:for-each 遍历和 poll 取出,顺序一样吗?
java·服务器·数据结构·后端·算法
‎ദ്ദിᵔ.˛.ᵔ₎2 小时前
c++11:fuction包装器
开发语言·c++
kimnoic2 小时前
Python 爬虫的原理
开发语言·python
Fluxproxy2 小时前
Python爬虫异步提速终极方案|线程池ThreadPoolExecutor实战,告别单线程慢速爬取
开发语言·爬虫·python
蜗牛互联网2 小时前
Java标准HTTP调用多模态模型的票据抽取前置校验
java·人工智能·python·http
淡海水2 小时前
02-07-原理篇-GC暂停时间的本质
开发语言·unity·c#·gc·暂停时间
工具派2 小时前
Agent 不是玄学:用 Java 状态机思维理解 LangGraph
java·人工智能·python
十年Java程序媛3 小时前
String / StringBuilder / StringBuffer|别再乱用字符串拼接,底层原理一次讲透
java·spring boot·后端