Java枚举类

枚举类解决的问题

解决使用常量存在的两个问题

  • 无法检查值是否在合法范围内
  • 常量是其它类型,例如intString,无法检查是否超出了使用范围,即当作一个普通的intString使用

语法糖的实质

定义一个枚举类

public enum Color {
    RED, GREEN, BLUE;
}

实际编译后

public final class Color extends Enum {
    public static final Color RED = new Color();
    public static final Color GREEN = new Color();
    public static final Color BLUE = new Color();
    private Color() {}
}

实践使用

@Getter  
public enum CorpusMode {  
    // 定义枚举类的值
    LEARNING("learning", "learningCount"),  
    EXERCISE("exercise", "exerciseCount"),  
    TEST("test", "textCount");  
    
    // 枚举类的属性
    private final String modeName;  
    private final String userCorpusStatCountField;  
    
    // 构造方法,默认private
    CorpusMode(String modeName, String userCorpusStatCountField) {  
        this.modeName = modeName;  
        this.userCorpusStatCountField = userCorpusStatCountField;  
    } 
     
    // 根据某属性值查找枚举类值
    public static CorpusMode getModeByModeName(String modeName) {  
        CorpusMode[] corpusModes = CorpusMode.values();  
        for (CorpusMode corpusMode : corpusModes) {  
            if (corpusMode.getModeName().equals(modeName)) {  
                return corpusMode;  
            }  
        }  
        return null;  
    } 
     
    // 检查是否存在某属性值对应的枚举类值
    public static boolean checkIfExistsByModeName(String modeName) {  
        return CorpusMode.getModeByModeName(modeName) != null;  
    }  
}

参考文档