Java14:栈长,我还有机会吗?

栈长:必须有!今天说下switch!

关注Java技术栈的朋友应该都知道,switch 在 JDK 12 中进行增强了,并且在 JDK 12/13 中一直是预览特性,刚出来的时候,栈长也第一时间对 switch 特性进行了分享:

Java 12 骚操作, switch居然还能这样玩!

现在随着 JDK 14 的发布,switch已经成为标准特性了,意外的是对 JDK 12 又进行了一些调整和增强,现在我们来看 Java 14 中的 switch 怎么玩吧。

本文是 Java 14 新特性的第 4 篇教程,也是对 JDK 12 switch 那篇的增强和修订!

Java 14 switch

Java 14 switch 有以下几点特色:

1、箭头表达式

箭头语法 ->,类似 Java 8 中的 Lambda 表达式,先来定义一个枚举类:

public enum Status {OPEN, INIT, PROCESS, PENDING, CLOSE;
}

传统的写法:

private static void test(Status status) {int result = 0;switch (status) {case OPEN:result = 1;break;case PROCESS:result = 2;break;case PENDING:result = 2;break;case CLOSE:result = 3;break;default:throw new RuntimeException("状态不正确");}System.out.println("result is " + result);
}

Java 14+ 后可以这样用:

private static void test(Status status) {var result = switch (status) {case OPEN -> 1;case PROCESS, PENDING -> 2;case CLOSE -> 3;default -> throw new RuntimeException("状态不正确");};System.out.println("result is " + result);
}

可以在 switch 语句块中返回值给一个变量(不是必须),多个 case 条件可以写在一行,用逗号分开,并且可以省略 break 关键字。

2、yield 关键字

yield 用来返回值,并跳出当前 switch 语句块,来看下面的示例:

private static void test(Integer value) {int number = switch (value) {case 3:System.out.println("3");yield 3;case 5:System.out.println("5");yield 5;default:System.out.println("default");yield 0;};System.out.println(number);
}

示例中,每个 case 都带了一个 yield 关键字返回值,也可以结合箭头表达式同时使用:

private static void test(Status status) {var result = switch (status) {case OPEN -> 1;case PROCESS, PENDING -> 2;case CLOSE -> {System.out.println("closed");yield 3;}default -> throw new RuntimeException("状态不正确");};System.out.println("result is " + result);
}

示例代码看了都懂吧,是不是很骚?

背后的秘密

背后的秘密是什么呢?

反编译上面那个例子的字节码再看下:

private static void test(Status status) {byte var10000;switch(status) {case OPEN:var10000 = 1;break;case PROCESS:case PENDING:var10000 = 2;break;case CLOSE:System.out.println("closed");var10000 = 3;break;default:throw new RuntimeException("状态不正确");}int result = var10000;System.out.println("result is " + result);
}

可以看到全部是传统写法了,原来又是一个语法糖。

好了,今天的分享就到这,收藏转发一下吧,虽然现在 JDK 8 是主流,但多学习了解不是坏事,日后必定有用!

想学习更多的 Java 8 ~ 14 系列新特性教程,请关注Java技术栈搜索阅读。

delphi switch语句例子_Java 14 祭出增强版 switch,真香!!相关推荐

  1. delphi switch语句例子_「GCTT 出品」Go 系列教程——10. switch 语句

    Go语言中文网,致力于每日分享编码知识,欢迎关注我,会有意想不到的收获! Go 系列教程是非常棒的一套初学者教程,入门就它了. 「GCTT 出品」Go 系列教程--1. 介绍与安装 「GCTT 出品」 ...

  2. java switch语句_Java 14:查看更新的switch语句

    java switch语句 于2020年3月发布的JDK 14带有switch语句的更新版本. 这是JDK 12和JDK 13中的预览功能. 要了解差异,让我们看一个简单的示例. 假设我们要基于Day ...

  3. delphi switch语句例子_Python系列之常用语句

    之前介绍了基本函数知识,这次我们一起来看下常用的语句,常用语句大概分为条件语句,循环语句,循环控制语句,pass语句这几种,我们一一来看: 1.条件语句 说起条件语句,我想学过编程的人会想到if-el ...

  4. java+switch语句+枚举_Java:在子类下使用带有枚举的switch语句

    Java:在子类下使用带有枚举的switch语句 首先,我将说明我对C#中的枚举更加熟悉,看起来java中的枚举非常混乱. 正如您所看到的,我正在尝试在下一个示例中使用switch语句@enums,但 ...

  5. 增强版Switch语句的使用方法

    照着旧版教材练习Switch语句的时候,发现IDEA出现了一条标黄警告:Switch语句可以替换为增强的"switch".于是找了一下资料发现在JAVA12版本之后,Switch语 ...

  6. Java:switch语句例子

    1.输入一个名次,第1-4名,分别称为冠军.亚军.季军.殿军,5名及5名以上,称为其他名次. import java.util.Scanner; public class switch1 {publi ...

  7. java中switch语句常量_Java switch语句:需要常量表达式,但它是常量

    所以,我正在这个类有几个静态常量: public abstract class Foo { ... public static final int BAR; public static final i ...

  8. IE 正式入土!网友祭出实体版墓碑...

    鱼羊 发自 凹非寺 量子位 | 公众号 QbitAI 嗨胖友们,今儿IE浏览器就正式退出历史舞台了. 尽管你可能早八百年就只用IE来下Chrome了,不过作为"童年回忆",网友们对 ...

  9. Java SE 12扩展Switch语句/表达式完整指南

    本文提供了Java SE 12扩展Switch语句/表达式的完整指南.文章详细介绍了扩展Java switch语句将其用作增强版switch语句或表达式.为帮助理解本文提供了具体案例. 本文要点 现在 ...

最新文章

  1. AIX查看端口被占用
  2. c大小写转换函数_Excel中的大小写金额转换,技巧法和函数法,职场必学技巧
  3. spring中的RowMapper
  4. php worker类,Workerman进阶之Worker类-id属性研究
  5. Kubernetes 中创建 Pod 时集群中到底发生了些什么?
  6. C++将类的构造函数、析构函数声明为private或者protected的用途
  7. 基础计算机b卷,计算机应用基础B卷.doc
  8. android viewpager画廊,Android使用ViewPager实现画廊效果
  9. .idata数据的解析
  10. GitHub 一周热点速览:手撕 LeetCode 一日 Star 破两千
  11. python培训班骗局-马哥教育官网-专业Linux培训班,Python培训机构
  12. c4d打开没反应_野分享:一大波C4D插件的测试以及分享
  13. 前端第四天 盒子模型/浮动与定位
  14. A certificate chain processed, but terminated in a root certificate which is not trusted...
  15. android背景置灰,android view置灰(哀悼日)
  16. Google play上架被拒踩坑系列
  17. 在AVD上运行程序时,程序闪退并报错unfortunately,xx has stopped
  18. 瑞工 无线打印服务器 评测,7800P 5G无线鼠标赏析
  19. SEO像艺术,为自己做站最划算
  20. 腾讯云服务器标准型SA1实例配置性能使用场景及注意事项分析

热门文章

  1. Apache Shiro:简化应用程序安全性
  2. 您不想错过的十大Java书籍
  3. java魔兽猎人_Java基于Swing实现的打猎射击游戏代码
  4. 【音视频安卓开发 (八)】OpenSLES播放音频步骤和接口讲解
  5. 字符串操作之字符串拷贝功能实现
  6. yapi 接口文档_1分钟docker部署顶尖 API 文档管理系统
  7. 这几道 C/C 题涉及你的知识盲区?
  8. C 为什么非要引入那几种类型转换?
  9. 【lua学习】2.数据类型
  10. python调用opengl_Python运行OpenGL示例