枚举类型复习以及在switch语句中的正确用法

先新建一个枚举类

import cn.hutool.core.util.ObjectUtil;

import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * @author: 李自强
 * @description: LzqEnum
 * @date: 2021/11/3 10:17 上午
 */
public enum LzqEnum {
    TALL(1,"高"), RICH(2,"富"), HANDSOME(-1,"帅");
    private Integer id;
    private String name;

    LzqEnum(Integer id,String name) {
        this.id = id;
        this.name = name;
    }

    public Integer getId() {
        return this.id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }

    //通过id返回枚举,否则返回null
    public static LzqEnum valueOf(Integer id) {
        if (ObjectUtil.isEmpty(id)) {
            return null;
        }
        LzqEnum[] values = LzqEnum.values();
        for(LzqEnum value : values){
            if(value.getId().equals(id)){
                return value;
            }
        }
        //遍历否则返回默认
        return null;
    }

    //返回其中一个字段的list遍历,这里返回namelist
    public static List<String> getNames(){
        return Stream.of(LzqEnum.values())
                .map(LzqEnum::getName).collect(Collectors.toList());
    }
}

再新建测试类测试

import java.util.List;

/**
 * @author: 李自强
 * @description: EnumTest
 * @date: 2021/11/3 10:17 上午
 */
public class EnumTest {

    public static void main(String[] args) {
        EnumTest test = new EnumTest();
        test.action();
        System.out.println(test.getList());
    }

    public List<String> getList(){
        return LzqEnum.getNames();
    }

    public void action() {
        LzqEnum test1 = LzqEnum.valueOf(2);
        System.out.println("初始化返回枚举😄_" + test1);
        switch (test1) {
            case TALL:
                System.out.println("返回高📉_" + test1);
                break;
            case RICH:
                System.out.println("返回富💰_" + test1);
                break;
            case HANDSOME:
                System.out.println("返回帅👴_" + test1);
                break;
        }

        //错误写法
//        LzqEnum test2 = LzqEnum.valueOf(-1);
//        switch (test2) {
//            case LzqEnum.HANDSOME:
//                break;
//            case LzqEnum.TALL:
//                break;
//            case LzqEnum.RICH:
//                break;
//        }
    }
}

很多人也许会尝试写下这样的代码:
在这里插入图片描述

		//错误写法
        LzqEnum test2 = LzqEnum.valueOf(-1);
        switch (test2) {
            case LzqEnum.HANDSOME:
                break;
            case LzqEnum.TALL:
                break;
            case LzqEnum.RICH:
                break;
        }
# 这样编译不会通过,提示case后必须是一个常量

正确的写法:

LzqEnum test1 = LzqEnum.valueOf(2);
        System.out.println("初始化返回枚举😄_" + test1);
        switch (test1) {
            case TALL:
                System.out.println("返回高📉_" + test1);
                break;
            case RICH:
                System.out.println("返回富💰_" + test1);
                break;
            case HANDSOME:
                System.out.println("返回帅👴_" + test1);
                break;
        }
}
# 即在 case 后面可以直接写枚举类型,不用加枚举类的类名。

如果需要根据类型的名称返回枚举实例,可以在枚举类中加入方法

//通过id返回枚举,否则返回null
    public static LzqEnum valueOf(Integer id) {
        if (ObjectUtil.isEmpty(id)) {
            return null;
        }
        LzqEnum[] values = LzqEnum.values();
        for(LzqEnum value : values){
            if(value.getId().equals(id)){
                return value;
            }
        }
        //遍历否则返回默认
        return null;
    }

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值