Java 枚举类详解:特点、语法、使用场景与最佳实践

一、why 枚举

Java 枚举(enum)是 Java 5 引入的类型,是 java.lang.Enum 的子类,本质上是一个 特殊的类。每个枚举值本质上都是这个类的实例,并且在 JVM 中是唯一、线程安全的。

public enum OrderStatus {
    PENDING, PAID, SHIPPED, COMPLETED
}

二、基本特点

特点说明
类型安全别人无法传错值进来
有序枚举值有 ordinal 序号
唯一实例每个值 JVM 中唯一
可自定义字段和方法可相当于 POJO
自带方法name(),ordinal(),values()
大量应用场景状态码,资格,常量集合

三、使用场景

1. 接口上的状态码通信

public enum ResultCode {
    SUCCESS(200, "操作成功"),
    FAIL(500, "操作失败");

    private final int code;
    private final String message;

    ResultCode(int code, String message) {
        this.code = code;
        this.message = message;
    }

    public int getCode() { return code; }
    public String getMessage() { return message; }
}

2. 有限类型列表(社会性别,交通灯)

public enum Gender {
    MALE, FEMALE, UNKNOWN
}

3. 配合 switch 分支

switch (status) {
    case PENDING -> System.out.println("待付");
    case PAID -> System.out.println("已支付");
}

4. 实现接口

public interface Operation {
    int apply(int a, int b);
}

public enum Operator implements Operation {
    ADD {
        public int apply(int a, int b) { return a + b; }
    },
    SUB {
        public int apply(int a, int b) { return a - b; }
    }
}

5. 单例模式(最安全,推荐)

public enum Singleton {
    INSTANCE;

    public void doSomething() {
        System.out.println("do work");
    }
}

四、常用方法 API

方法说明
name()返回枚举实例名称
ordinal()返回枚举实例的序号
values()返回所有枚举值的数组
valueOf(String)通过名称获取枚举实例

五、实际应用经验

  • 状态码、角色类型、常量值必须用 enum 控制

  • 全部值必须在初始化时构造,不要异步更改

  • 如果需要操作 DB,建议 enum 中做二级映射


六、注意点

  • enum 不能 extends 其他 class(因为已 extends Enum)

  • enum 构造函数必须是 private

  • enum 值必须放在第一行,后面才能有字段/方法

  • 不适合用于元素不确定或需动态扩展的场景


七、小结

Java 枚举是非常重要的类型技术,它是将数据 + 行为组合起来的形式,不仅是常量,而是有模型性、类型安全性的结构。

推荐:

  • 尽量用 enum 控制值的范围

  • 合理形成 "code + msg" 组合字段

  • 配合 switch / stream / DB 操作

  • 不要把 enum 当 "String 常量帐" 用,它可以更加智能

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星空下的DeppBing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值