java枚举类的name()方法返回声明时的原始字面名称,区分大小写且只读;它与valueof()互为逆操作,但不可用于用户显示或业务含义表达。

Java 枚举类的 name() 方法直接返回该枚举常量在源码中声明时使用的**字面名称(identifier)**,不经过任何转换,区分大小写,且不可修改。
name() 方法的基本用法
每个枚举常量都继承自 java.lang.Enum,自动拥有 name() 和 ordinal() 等方法。name() 返回的是定义时写的原始标识符字符串。
- 例如定义
enum Color { RED, GREEN, BLUE },调用Color.RED.name()返回字符串"RED" - 它不是获取描述性文本,也不等同于
toString()(后者可被重写,name()永远固定) - 不能对
name()的返回值做赋值或修改,它是只读属性
name() 与 valueOf() 的对应关系
name() 的返回值可原样传给静态方法 valueOf(Class, String) 来反向查找枚举实例。
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
-
Color.RED.name()→"RED" -
Color.valueOf("RED")→ 返回Color.RED - 若传入的字符串和任一枚举常量的
name()不完全匹配(如大小写错误、拼写错误),会抛出IllegalArgumentException
常见误区与注意事项
避免把 name() 和业务含义混淆:
- 不要用
name()显示给用户(比如显示 "RED" 而不是“红色”),应配合自定义字段或重写toString() - 枚举常量名一旦写死,后续修改会影响所有依赖
name()的逻辑(如配置文件、数据库存储值、JSON 序列化默认行为) - 序列化框架(如 Jackson)默认使用
name()输出字符串;如需别名,需用@JsonValue或@JsonProperty注解干预
简单示例代码
public enum Status {
PENDING, APPROVED, REJECTED;
}
System.out.println(Status.PENDING.name()); // 输出:PENDING
System.out.println(Status.valueOf("APPROVED")); // 正常返回 Status.APPROVED
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










