Java枚举类骨架代码表相关问询:现有枚举代码是否需补充int类型字段?
Java枚举定义问题解答
现有代码的可用性
你当前编写的无自定义字段的枚举代码已经可以满足基础使用场景:
- 可以直接通过
SkyCondition.SUNNY这类常量做状态判断、参数传递 - 自带
values()方法支持遍历所有枚举项,valueOf(String name)方法支持根据字符串转换为对应枚举 - 每个枚举项默认自带序号,可通过
ordinal()方法获取,当前定义下SUNNY对应0、SNOWY对应1、CLOUDY对应2、RAINY对应3,不过不推荐业务逻辑直接依赖这个默认序号,后续调整枚举项顺序会直接改变返回值,容易引发线上问题
什么时候需要新增int类型定义
是否需要加int相关字段完全取决于你的业务需求:
- 如果没有给天气状态绑定独立int编码的需求(比如和前端/数据库交互要传递固定数值、且数值和默认ordinal输出不匹配),你现在的代码已经完全够用,不需要额外加字段
- 如果有绑定固定int编码的需求,可以按如下示例扩展枚举:
public enum SkyCondition { // 枚举项后指定绑定的int值 SUNNY(1), SNOWY(2), CLOUDY(3), RAINY(4); // 定义int类型存储编码 private final int code; // 枚举私有构造方法,给每个枚举项赋值编码 SkyCondition(int code) { this.code = code; } // 对外暴露获取编码的方法 public int getCode() { return code; } // 可选扩展:根据int编码反查对应枚举 public static SkyCondition getByCode(int code) { for (SkyCondition condition : SkyCondition.values()) { if (condition.code == code) { return condition; } } throw new IllegalArgumentException("无效的天气编码: " + code); } }
内容的提问来源于stack exchange,提问作者Proppsicle
相关产品推荐
相关产品推荐

