Java:枚举类的用法

郎家岭伯爵 2023年03月08日 433次浏览

前言

针对枚举类的基础用法大家可参考菜鸟教程,本文记录一下稍微复杂点的用法(不同用法的本质是相同的,只是形式有所不同)。

实现

设想这样一个应用场景:根据一个给定的值,如果这个值在某个集合内,就返回特定的 code 和 name 。

定义枚举类

针对如上场景,我们把值的集合定义为一个 List(已给定初始化值) ,在静态方法 getCodeAndNameByStrings() 内对所有的枚举值进行遍历,如果给定的值包含在枚举值的 List 中,那么即返回此枚举值的 code 和 name 。

具体代码如下:

package com.langjialing.helloworld.model.enums;

import lombok.AllArgsConstructor;
import lombok.Getter;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

/**
 * @author 郎家岭伯爵
 * @date 2023/3/2 9:06
 */
@Getter
@AllArgsConstructor
public enum EnumTest {
    ENUM_TEST_1("code1","name1",new ArrayList<String>(){{
        add("string1-1");
        add("string1-2");
        add("string1-3");
    }}),
    ENUM_TEST_2("code2","name2",new ArrayList<String>(){{
        add("string2-1");
        add("string2-2");
        add("string2-3");
    }}),
    ENUM_TEST_3("code3","name3",new ArrayList<String>(){{
        add("string3-1");
        add("string3-2");
        add("string3-3");
    }}),;

    private String code;
    private String name;
    private List<String> strings;

    public static HashMap<String, String> getCodeAndNameByStrings(String s){
        for (EnumTest e:EnumTest.values()){
            if (e.strings.contains(s)){
                HashMap<String, String> resultMap = new HashMap<>();
                resultMap.put("code", e.code);
                resultMap.put("name", e.name);
                return  resultMap;
            }
        }
        return null;
    }
}

测试方法

我们新建一个 controller 进行测试:

package com.langjialing.helloworld.controller;

import com.langjialing.helloworld.model.enums.EnumTest;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;

/**
 * @author 郎家岭伯爵
 * @date 2023/3/6 9:22
 */
@RestController
public class EnumTestController {
    @GetMapping("/enum")
    public HashMap<String, String> testEnum(String s){
        return EnumTest.getCodeAndNameByStrings(s);
    }
}

总结

Java 中枚举类的用法。