Java基础入门之switch怎么使用枚举

 更新时间:2023年06月06日 11:42:38   作者:掉头发的王富贵  
在Java开发中,switch语句是一种常用的流控制语句,而当使用枚举类型作为条件时,我们常常会遇到报错问题,那么该如何解决呢,下面就来详细讲讲

在Java开发中,switch语句是一种常用的流控制语句,用于根据不同的条件执行不同的代码块。而当使用枚举类型作为条件时,我们常常会遇到“Constant expression required”的报错问题,这给程序开发造成了不小的困扰。

switch 语句中的变量类型可以是: byte、short、int 或者 char。从 Java SE 7 开始,switch 支持字符串 String 类型了,同时 case 标签必须为字符串常量或字面量。 我们创建一个枚举:

@Getter
@AllArgsConstructor
public enum ProductEnum {
	TYPE_1(1,"精品推荐"),
	TYPE_2(2,"热门榜单"),
	TYPE_3(3,"首发新品"),
	TYPE_4(4,"猜你喜欢");
	private Integer value;
	private String desc;
}

用switch语句:

 int a = 0;
        // order
        switch (a) {
            //精品推荐
            case ProductEnum.TYPE_1.getValue():
                System.out.println("1");
                break;
            //首发新品
            case ProductEnum.TYPE_2.getValue():
                System.out.println("1");
                break;
            // 猜你喜欢
            case ProductEnum.TYPE_3.getValue():
                System.out.println("1");
                break;
            // 热门榜单
            case ProductEnum.TYPE_4.getValue():
                System.out.println("1");
                break;
        }

看上去没有问题,但是因为switch中需要的是一个常量,但是枚举中又是不可以加final关键字,所以会出现这种情况:(Constant expression required:需要常量表达式

我们想要使用就需要封装一个方法在枚举类里面:

public static ProductEnum toType(int value) {
		return Stream.of(ProductEnum.values())
				.filter(p -> p.value == value)
				.findAny()
				.orElse(null);
	}

封装后的枚举类:

@Getter
@AllArgsConstructor
public enum ProductEnum {
	TYPE_1(1,"精品推荐"),
	TYPE_2(2,"热门榜单"),
	TYPE_3(3,"首发新品"),
	TYPE_4(4,"猜你喜欢");
	private Integer value;
	private String desc;
	public static ProductEnum toType(int value) {
		return Stream.of(ProductEnum.values())
				.filter(p -> p.value == value)
				.findAny()
				.orElse(null);
	}
}

这个时候我们这么用:

   int a = 0;
        switch (ProductEnum.toType(a)) {
            //精品推荐
            case TYPE_1:
                System.out.println("1");
                break;
            //首发新品
            case TYPE_3:
                System.out.println("2");;
                break;
            // 猜你喜欢
            case TYPE_4:
                System.out.println("3");
                break;
            // 热门榜单
            case TYPE_2:
                System.out.println("4");
                break;
        }

这样就没问题啦:

当我们在处理枚举类型时,遇到了“需要常量表达式”的问题。针对这个问题,我们可以按照上述方法进行处理,将枚举的值转化成枚举类型,来避免编译错误。

除此之外,值得一提的是,在实际应用中,枚举也是一种非常重要的数据类型。它可以用于表示各种状态、选项以及配置项,还可以为程序中的常量命名,以减少硬编码。因此,熟练掌握枚举类型的相关操作,是我们开发高效、优质代码所必不可少的基本技能。

总之,本文向大家介绍了如何在Java开发中处理枚举类型,让大家更好地理解和掌握switch语句的使用方法。希望大家能够通过学习和实践,巩固这些基础知识,并在日常工作中充分发挥它们的应用价值,为自己的开发工作提升整体效率与质量。

到此这篇关于Java基础入门之switch怎么使用枚举的文章就介绍到这了,更多相关Java switch枚举内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • maven私有镜像仓库nexus部署使用

    maven私有镜像仓库nexus部署使用

    Nexus在企业开发中还是比较常用的私有仓库管理工具,本文主要介绍了maven私有镜像仓库nexus部署使用,具有一定的参考价值,感兴趣的可以了解一下
    2024-07-07
  • java开发CPU流水线与指令乱序执行详解

    java开发CPU流水线与指令乱序执行详解

    这篇文章主要为大家介绍了java开发CPU流水线与指令乱序执行详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • spring事物传播propagation类别含义详解

    spring事物传播propagation类别含义详解

    这篇文章主要介绍了spring事物传播propagation类别含义详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • Java 多个文件生成zip包、下载zip包的实现代码

    Java 多个文件生成zip包、下载zip包的实现代码

    这篇文章主要介绍了Java 多个文件生成zip包、下载zip包,包括文件上传,文件下载,多个文件打成zip包的操作代码,本文给大家介绍的非常详细,需要的朋友可以参考下
    2024-01-01
  • Java MAVEN 工程pom配置报错解决方案

    Java MAVEN 工程pom配置报错解决方案

    这篇文章主要介绍了Java MAVEN 工程pom配置报错解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • java基础之接口组成更新的实现

    java基础之接口组成更新的实现

    本文主要介绍了java基础之接口组成更新的实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-04-04
  • Java synchronized轻量级锁实现过程浅析

    Java synchronized轻量级锁实现过程浅析

    这篇文章主要介绍了Java synchronized轻量级锁实现过程,synchronized是Java里的一个关键字,起到的一个效果是"监视器锁",它的功能就是保证操作的原子性,同时禁止指令重排序和保证内存的可见性
    2023-02-02
  • SpringBoot2.x配置HTTPS访问的过程

    SpringBoot2.x配置HTTPS访问的过程

    这篇文章主要介绍了SpringBoot2.x配置HTTPS访问的过程,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • SpringBoot整合MQTT小结汇总

    SpringBoot整合MQTT小结汇总

    MQTT 客户端是运行 MQTT 库并通过网络连接到 MQTT 代理的任何设备,是一种基于发布/订阅(publish/subscribe)模式的“轻量级”通讯协议,该协议构建于 TCP/IP 协议上,由 IBM 于 1999 年发明,对SpringBoot整合MQTT相关知识感兴趣的朋友一起看看吧
    2022-01-01
  • JAVA后台实现文件批量下载方式

    JAVA后台实现文件批量下载方式

    这篇文章主要介绍了JAVA后台实现文件批量下载方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05

最新评论