public enum WaterState {
// 如果存在更多属性,直接在后面添加即可
GAS(1, "gas"),
LIQUID(2, "liquid"),
SOLID(3, "solid");
// 如果有必要,还可以添加以id为key的mappings。
// 如果不需要通过name获取枚举值,也可以不添加mappings字段
private static final Map<String, WaterState> mappings = new HashMap<>(4);
static {
for (WaterState state : values()) {
mappings.put(state.name, state);
}
}
private int id;
private String name;
// 枚举类型构造函数访问修饰符默认为private且只能为private,不要认为这里是default
WaterState(int id, String name) {
this.id = id;
this.name = name;
}
public String getName() {
return name;
}
public int getId() {
return id;
}
public Optional<WaterState> name2Enum(String name) {
String trimName = Optional.ofNullable(name)
.filter(StringUtils::isNotBlank)
.map(StringUtils::trim)
.orElse(StringUtils.EMPTY);
return Optional.ofNullable(mappings.get(trimName));
}
}
这是我目前认为的枚举类的最佳实践。后续发现更好的再更新