枚举常量本质是静态实例,需用private final字段和private构造方法绑定专属数据;可添加getter、业务方法、抽象方法实现多态,并提供static工具方法如fromcode()和校验逻辑。

定义私有字段与构造方法
枚举常量本质是该枚举类的静态实例,要为每个常量绑定专属数据,需声明 private final 字段,并提供 private 构造方法(显式写或省略修饰符都默认为 private)。构造方法在类加载时被自动调用,每个常量传入对应参数完成初始化。
- 字段必须用 private final 修饰,保障不可变性与封装性
- 构造方法不能是 public/protected,否则编译报错
- 枚举常量后紧跟括号,参数顺序和类型须与构造方法签名严格匹配
- 建议提供 public getter 方法,不直接暴露字段
添加自定义业务成员方法
枚举可像普通类一样定义任意非静态方法,包括重写 toString()、校验逻辑、格式化工具等。这些方法通过枚举常量调用,例如 OrderStatus.PAID.getDesc()。
- 可重写
toString()返回更友好的字符串表示,如code + " " + desc - 避免在方法中修改字段值,违背枚举“不可变”语义
- 不能重写
values()或valueOf(String)—— 它们由编译器生成,手动声明会编译失败 - 若需按属性查枚举(如根据 code 查状态),应自定义
public static Optional<t> fromCode(int code)</t>方法
实现多态行为:抽象方法
当不同枚举项需执行差异显著的业务逻辑(如支付成功发通知、订单取消释放库存),可用抽象方法实现天然多态,替代 if-else 或策略映射。
- 在常量列表末尾、其他方法之前声明
public abstract 返回类型 方法名(参数) - 每个枚举常量必须用大括号
{ }显式实现该方法 - 调用时直接
OrderStatus.PAID.execute(),无需 instanceof 或 switch 判断 - 抽象方法体为空,强制各常量提供专属实现,增强可维护性
配套实用工具方法
真实项目中离不开反查、校验与统一输出。这些应作为 static 工具方法放在枚举内部,提升复用性与类型安全性。
- 用
Optional<t></t>封装反查结果(如fromCode),避免 null 值风险 - 遍历
values()实现查找,注意该方法在枚举较多时可能影响性能,必要时可加缓存 - 提供
isValidCode(int code)等校验方法,集中管控合法输入范围 - 支持实现接口(如
Serializable或自定义业务接口),但不能继承其他类
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











