1. public enum WaterState {
    2. // 如果存在更多属性,直接在后面添加即可
    3. GAS(1, "gas"),
    4. LIQUID(2, "liquid"),
    5. SOLID(3, "solid");
    6. // 如果有必要,还可以添加以id为key的mappings。
    7. // 如果不需要通过name获取枚举值,也可以不添加mappings字段
    8. private static final Map<String, WaterState> mappings = new HashMap<>(4);
    9. static {
    10. for (WaterState state : values()) {
    11. mappings.put(state.name, state);
    12. }
    13. }
    14. private int id;
    15. private String name;
    16. // 枚举类型构造函数访问修饰符默认为private且只能为private,不要认为这里是default
    17. WaterState(int id, String name) {
    18. this.id = id;
    19. this.name = name;
    20. }
    21. public String getName() {
    22. return name;
    23. }
    24. public int getId() {
    25. return id;
    26. }
    27. public Optional<WaterState> name2Enum(String name) {
    28. String trimName = Optional.ofNullable(name)
    29. .filter(StringUtils::isNotBlank)
    30. .map(StringUtils::trim)
    31. .orElse(StringUtils.EMPTY);
    32. return Optional.ofNullable(mappings.get(trimName));
    33. }
    34. }

    这是我目前认为的枚举类的最佳实践。后续发现更好的再更新