You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中枚举(Enum)的多种使用方式及自定义枚举访问方法

Java枚举的使用方式及自定义枚举的访问方法

一、Java枚举的常见使用方式

  • 定义固定常量集合:替代传统的int/String常量,用于表示有限的固定取值(如星期、季节),避免魔法值,保证类型安全。
  • 作为switch分支条件:枚举类型可直接在switch中使用,比int/String更严谨,不会出现非法分支值。
  • 带属性与方法的枚举:为枚举常量添加自定义属性、构造方法及业务方法,让枚举携带更多信息和行为,比如你定义的DayOfWeek就带有label属性和getValue()方法。
  • 实现接口:枚举可以实现接口,让不同枚举类遵循同一规范,例如定义Displayable接口,让枚举实现统一的展示方法。
  • 实现单例模式:利用JVM对枚举实例的唯一性和线程安全保障,简洁实现单例,比如public enum Singleton { INSTANCE; },这是推荐的单例实现方案之一。
  • 结合专用集合使用:使用EnumSet或EnumMap这类为枚举优化的集合,比普通集合性能更高,例如EnumSet.of(DayOfWeek.SUNDAY, DayOfWeek.SATURDAY)可以快速创建周末集合。

二、DayOfWeek枚举的不同访问方式

  • 直接访问枚举常量:通过类名加常量名直接获取实例:
    DayOfWeek monday = DayOfWeek.MONDAY;
    
  • 通过valueOf()方法获取:传入常量的字符串名称(大小写敏感),返回对应枚举实例:
    DayOfWeek tuesday = DayOfWeek.valueOf("TUESDAY");
    
  • 通过values()方法遍历所有常量:values()返回包含所有枚举常量的数组,用于遍历或批量处理:
    for (DayOfWeek day : DayOfWeek.values()) {
        System.out.println(day + " 的label值:" + day.getValue());
    }
    
  • 通过自定义属性反向查找:给枚举添加静态方法,根据label值匹配对应的枚举实例,比如在DayOfWeek中新增:
    public static DayOfWeek getByLabel(int label) {
        for (DayOfWeek day : values()) {
            if (day.label.equals(label)) {
                return day;
            }
        }
        throw new IllegalArgumentException("无效的label值:" + label);
    }
    
    调用方式:
    DayOfWeek wednesday = DayOfWeek.getByLabel(3);
    
  • 通过ordinal()获取默认顺序值:每个枚举常量有默认的顺序编号(从0开始),但不建议依赖该值,因为调整枚举常量顺序会导致ordinal()结果变化,你的自定义label属性更可靠:
    int sundayOrdinal = DayOfWeek.SUNDAY.ordinal(); // 返回0,与当前label值一致,但顺序调整后会改变
    

内容的提问来源于stack exchange,提问作者Ajay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 08:03:56