java枚举可定义private final属性和private构造方法,常量声明时传参调用构造方法初始化,需提供public getter;支持多构造方法重载,推荐配套fromcode()和tostring()等工具方法。

Java 枚举类可以像普通类一样定义私有属性和构造方法,但必须遵守封装原则和编译器约束:属性用 private final 修饰,构造方法必须是 private(显式声明或默认),枚举常量在声明时通过括号传参调用该构造方法完成初始化。
怎么声明带属性和构造方法的枚举
枚举常量列表必须放在类最前面,后跟分号;属性声明紧随其后,且必须在任何方法之前;构造方法只能是 private,用于接收常量传入的参数并赋值给字段。
- 字段推荐使用 private final,确保不可变性
- 构造方法不写修饰符也默认 private,写成 public/protected 会编译报错
- 每个枚举常量后的括号
CREATED("创建", 100)就是在调用构造方法 - 务必提供 public getter 方法,避免直接暴露字段
常见写法示例
比如表示订单状态的枚举:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
public enum OrderStatus {<br> CREATED("创建", 100),<br> PAID("已支付", 200),<br> SHIPPED("已发货", 300);<br><br> private final String desc;<br> private final int code;<br><br> // ✅ 私有构造方法<br> OrderStatus(String desc, int code) {<br> this.desc = desc;<br> this.code = code;<br> }<br><br> public String getDesc() { return desc; }<br> public int getCode() { return code; }<br>}
支持多种参数组合与重载
一个枚举可定义多个 private 构造方法,不同常量按需匹配。例如部分状态只需描述,部分还需分类标识:
-
CREATED("创建")→ 匹配OrderStatus(String desc) -
PAID("已支付", "finance")→ 匹配OrderStatus(String desc, String category) - 注意:常量声明时参数类型和顺序必须与对应构造方法严格一致
配套工具方法建议
仅靠构造方法不够,真实开发中常需根据 code 反查枚举、校验输入或格式化输出:
- 写
public static Optional<orderstatus> fromCode(int code)</orderstatus>,遍历values()查找,返回 Optional 更安全 - 重写
toString()返回code + " " + desc,比默认输出更直观 - 避免在构造方法里做 IO、网络请求或抛检查异常——类加载时所有实例就已初始化完毕
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










