枚举类解决的问题
解决使用常量存在的两个问题
- 无法检查值是否在合法范围内
- 常量是其它类型,例如
int
或String
,无法检查是否超出了使用范围,即当作一个普通的int
或String
使用
语法糖的实质
定义一个枚举类
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;
}
}
参考文档
PREVIOUSJava8 CompletableFuture使用
NEXTJava自定义注解