Java 12 switch表达式新特性(->,yield)

switch表达式

使用switch时,如果遗漏了break,就会造成严重的逻辑错误,而且不易在源代码中发现错误。从Java 12开始,switch语句升级为更简洁的表达式语法,使用类似模式匹配(Pattern Matching)的方法,保证只有一种路径会被执行,并且不需要break语句:

public class Main {public static void main(String[] args) {String fruit = "apple";switch (fruit) {case "apple" -> System.out.println("Selected apple");case "pear" -> System.out.println("Selected pear");case "mango" -> {System.out.println("Selected mango");System.out.println("Good choice!");}default -> System.out.println("No fruit selected");}}
}

注意新语法使用->,如果有多条语句,需要用{}括起来。不要写break语句,因为新语法只会执行匹配的语句,没有穿透效应。

很多时候,我们还可能用switch语句给某个变量赋值。例如:

int opt;
switch (fruit) {
case "apple":opt = 1;break;
case "pear":
case "mango":opt = 2;break;
default:opt = 0;break;
}

使用新的switch语法,不但不需要break,还可以直接返回值。把上面的代码改写如下:

public class Main {public static void main(String[] args) {String fruit = "apple";int opt = switch (fruit) {case "apple" -> 1;case "pear", "mango" -> 2;default -> 0;}; // 注意赋值语句要以;结束System.out.println("opt = " + opt);}
}

这样可以获得更简洁的代码。

yield

大多数时候,在switch表达式内部,我们会返回简单的值。

但是,如果需要复杂的语句,我们也可以写很多语句,放到{…}里,然后,用yield返回一个值作为switch语句的返回值:

public class Main {public static void main(String[] args) {String fruit = "orange";int opt = switch (fruit) {case "apple" -> 1;case "pear", "mango" -> 2;default -> {int code = fruit.hashCode();yield code; // switch语句返回值}};System.out.println("opt = " + opt);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/309180.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java 实例 - 队列(Queue)用法

队列是一种特殊的线性表,它只允许在表的前端进行删除操作,而在表的后端进行插入操作。 LinkedList类实现了Queue接口,因此我们可以把LinkedList当成Queue来用。 以下实例演示了队列(Queue)的用法: import…

每日一练(第一天)

1、交换机本质上是一种网桥 (是)。 分析: 网桥(Bridge)也称为桥接器,是连接两个局域网的存储转发设备,用它可以使完全具有相同或相似体系结构网络系统的连接,这样不但能扩展网络的距离或范围&a…

酸吗?28岁程序员财务自由宣布退休!

财务自由是我们这代人的共同追求,有程序员28岁就做到了。近期的一条新闻就直接刷屏了,28岁今日头条程序员手握上亿期权宣布退休,引发一片羡慕嫉妒恨。履历如下:2008-2012就读于暨南大学政治与行政管理专业,自学编程。2…

Java Stack 类

Java Stack 类 栈是Vector的一个子类,它实现了一个标准的后进先出的栈。 堆栈只定义了默认构造函数,用来创建一个空栈。 堆栈除了包括由Vector定义的所有方法,也定义了自己的一些方法。 Stack() 除了由Vector定义的所有方法,自…

nuget 是如何还原包的

nuget 是如何还原包的Intro一直以来从来都只是简单的用 nuget 包,最近想折腾一个东西,需要自己搞一个 nuget 包的解析,用户指定 nuget 包的名称和版本,然后去解析对应的 nuget 包并添加引用到项目, 于是就想搞明白 nug…

linux技术笔记(常用命令)持续更新中。。。

文章目录1、Linux 下解压 .zip 和 .rar 文件2、 [Mac 终端命令大全](https://www.jianshu.com/p/3291de46f3ff)3、Maven环境本地仓库目录阿里云仓库镜像系统环境变量mac 配置环境变量,退出终端失效的问题1、Linux 下解压 .zip 和 .rar 文件 解压 .zip zip -r file…

iMovie使用技巧

iMovie使用技巧 学习视频: 流程笔记: J、k、l浏览片段 1、i 设置出点 2、o设置入点 3、剪辑阶段可直接拖动片段,浏览阶段f设置为喜欢,有一条绿色的线 4、不喜欢的素材可直接按delete,标记为不喜欢,有一条红…

使用Azure AD B2C为ASP.NET Core 设置登录/注册

一,引言上次关于Azure AD B2C 讲到一些概念,有介绍到,Azure AD B2C 也是一种身份验证的解决方案,但是它运行客户使用其首选的社交,企业或者本地账户标识对应用程序和API进行单一登录访问。同样,Azure AD B2…

safari浏览器的使用tips

前言:最近毕设,原有Windows电脑太卡,再加上用mac习惯了,就买了mac笔记本,最后还是safari好用,那就整理下我在使用中好用的快捷键或者小tips 文章目录截图截图 全屏截图 shiftcommand3 safari界面浮窗 shif…

使用 Azure Function 定时启动云 VM

点击上方蓝字关注“汪宇杰博客”导语微软 Azure 平台的 VM 可以做到定时自动关机,然而只有 DevTest Lab 服务中的 VM 能够定时开机,普通用途的 VM 还没有上线这个功能。但是没关系,我们可以曲线救国,通过最新版的 Azure Function …

一个毕设的建成——记录下我毕设途中的《SOP》

文章目录记录过程中遇到解决的方法1、pom导入的包&#xff08;权限比较大&#xff09;记录过程中遇到解决的方法 https://blog.csdn.net/zeng_jun_yv/article/details/118892438 1、pom导入的包&#xff08;权限比较大&#xff09; <&#xff01;--https://mvnrepository…

文章目录 | .NET Core on K8s学习之旅 (更新至20200618)

.NET Core on K8s学习之旅更新记录&#xff1a;-- 20200511 增加Ingress & Nginx Ingress介绍-- 20200515 增加Ocelot API网关集成示例介绍-- 20200525 增加Ingress实现灰度发布示例介绍1关于这个系列文章自从2018年底离开工作了3年的M公司加入X公司之后&#xff0c;开始了…

【Blog.Core重要升级】:封装服务扩展层

昨天有群里小伙伴咨询了一个问题&#xff1a;关于如何在Blog.Core项目中&#xff0c;实现多资源终端的问题&#xff0c;比如这样&#xff1a;一个AdminMvc的管理后台&#xff08;MVC项目&#xff09;&#xff0c;一个WebApi项目&#xff0c;一个ConsoleApp的控制台项目&#xf…

如何激发团队潜能?

每个技术人员最终可能都会走上管理岗位&#xff0c;从最初的开发 Leader、到部门负责人、甚至到 CTO,这每一个角色的转变&#xff0c;都需要付出巨大的努力去进行思维的转变。最近读的《授权》这本书可以让我们更好地胜任管理这个岗位。本书的作者马凯特是一名海军军官&#xf…

快速打造属于你的接口自动化测试框架

1 接口测试接口测试是对系统或组件之间的接口进行测试&#xff0c;主要是校验数据的交换&#xff0c;传递和控制管理过程&#xff0c;以及相互逻辑依赖关系。接口自动化相对于UI自动化来说&#xff0c;属于更底层的测试&#xff0c;这样带来的好处就是测试收益更大&#xff0c;…

Java Number Math 类方法

Java Math 类 Java 的 Math 包含了用于执行基本数学运算的属性和方法&#xff0c;如初等指数、对数、平方根和三角函数。 Math 的方法都被定义为 static 形式&#xff0c;通过 Math 类可以在主函数中直接调用。 public class Test { public static void main (String []args…

lin-cms-dotnetcore功能模块的设计

先来回答以下问题。1.什么是cms&#xff1f;Content Management System&#xff0c;内容管理系统。2.dotnetcore是什么&#xff1f;.NET Core&#xff0c;是由Microsoft开发&#xff0c;目前在.NET Foundation(一个非营利的开源组织)下进行管理&#xff0c;采用宽松的MIT协议&a…