Java 13 都快要来了,12必须跟栈长学起!

Java 13 即将发布,新特性必须抢先看!

Java 12 中对 switch 的语法更友好了,建议大家看下栈长在Java技术栈微信公众号分享的《switch case 支持的 6 种数据类型!》,对理解 switch 更有帮助。

那么在 Java 12 中可以怎样玩 switch?

先来定义一个枚举类:

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

Java 12 之前是这样用的:

private static void testSwitch1(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 12 后可以这样用:

private static void testSwitch2(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);
}

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

Java 12 switch 有以下几点特色:

  • 箭头语法 ->,类似 Java 8 中的 Lambda 表达式;
  • 可以直接返回值给一个变量,并且可以不用 break 关键字;
  • case 条件,多个可以写在一行,用逗号分开;
  • 可以省略 break 关键字;

当然你也可以使用 break 关键字,后面跟值:

private static void testSwitch3(Status status) {
var result = switch (status) {
case OPEN -> {
break 1;
}
case PROCESS, PENDING -> {
break 2;
}
case CLOSE -> {
break 3;
}
default -> {
break 5;
}
};
System.out.println("result is " + result);
}

不推荐用这种,在编译器也会显示灰色,并提示你更改。

最后,这个新特性是 Java 12 预览版中的特性:JEP 325: Switch Expressions (Preview),要使用这个新特性,请切换至 Java 12 预览版。

参考 https://openjdk.java.net/jeps/325

好了,今天的分享就到这,收藏转发一下吧,多学习了解,日后必定有用!

历史 Java 新特性干货分享:



获取上面这份 Java 8~12 系列新特性干货文章,请在微信搜索关注微信公众号:Java技术栈,在公众号后台回复:java。

本文原创首发于微信公众号:Java技术栈(id:javastack),转载请原样保留本信息。

Java 12 骚操作, switch居然还能这样玩!的更多相关文章

  1. Java 12 骚操作, String居然还能这样玩!

    Java 13 都快要来了,12必须跟栈长学起! Java 13 即将发布,新特性必须抢先看! 栈长之前在Java技术栈微信公众号分享过<Java 11 已发布,String 还能这样玩!> ...

  2. Java 12 骚操作, 文件比对居然还能这样玩!

    Java 13 都快要来了,12必须跟栈长学起! Java 13 即将发布,新特性必须抢先看! 之前分享了一些 Java 12 的骚操作,今天继续,今天要分享的是 Java 12 中的文件比对骚操作. ...

  3. 打破你的认知!Java空指针居然还能这样玩,90%人不知道…

    相信在座的各位都遇到过空指针异常,不甚其烦,本文不是教你避免空指针,而是一些对空指针其他方面的理解. 本文可能有点另类,也可能会打破你对空指针的认知. 1.null.method() 空指针? 我们知 ...

  4. Java 11 已发布,String 还能这样玩!

    在文章<Java 11 正式发布,这 8 个逆天新特性教你写出更牛逼的代码>中,我有介绍到 Java 11 的八个新特性,其中关于 String 加强部分,我觉得有点意思,这里单独再拉出来 ...

  5. 简直骚操作,ThreadLocal还能当缓存用

    背景说明 有朋友问我一个关于接口优化的问题,他的优化点很清晰,由于接口中调用了内部很多的 service 去组成了一个完成的业务功能.每个 service 中的逻辑都是独立的,这样就导致了很多查询是重 ...

  6. switch多值匹配骚操作,带你涨姿势!

    我们都知道 switch 用来走流程分支,大多情况下用来匹配单个值,如下面的例子所示: /** * @from 微信公众号:Java技术栈 * @author 栈长 */ private static ...

  7. 一波骚操作,我把 SQL 执行效率提高了 10,000,000 倍!

    作者:风过无痕-唐 http://www.cnblogs.com/tangyanbo/p/4462734.html 场景 我用的数据库是mysql5.6,下面简单的介绍下场景 课程表: create  ...

  8. Java 12 新特性介绍,快来补一补

    Java 12 早在 2019 年 3 月 19 日发布,它不是一个长久支持(LTS)版本.在这之前我们已经介绍过其他版本的新特性,如果需要可以点击下面的链接进行阅读. Java 11 新特性介绍 J ...

  9. 尝鲜Java 12新特性:switch表达式

    Java 12将在两个月后(2019/3/19)发布,现已进入RDP1阶段,确定加入8个JEP.其中对Java语法的改进是JEP 325: switch表达式.于是我迫不及待,提前感受一下更先进的语言 ...

随机推荐

  1. Guava Cache用法介绍

    背景 缓存的主要作用是暂时在内存中保存业务系统的数据处理结果,并且等待下次访问使用.在日长开发有很多场合,有一些数据量不是很大,不会经常改动,并且访问非常频繁.但是由于受限于硬盘IO的性能或者远程网络 ...

  2. selenium三个等待方法

    为什么需要等待时间:页面加载需要时间,如果页面没有加载完成,直接去定位,可能定位不到元素 1.强制等待: import time time.sleep(2) 不管有没有完成加载,必须等待2秒 2.隐式 ...

  3. win下maridb 10.1.8下主从复制配置

    主库配置 server_id=1read-only=0replicate-do-db=mydatalog-bin=mysql-bin 主库权限设置 GRANT replication slave ON ...

  4. 使用awrsqrpt.sql查看执行计划demo

    SQL> @?/rdbms/admin/awrsqrpt.sql Current Instance ~~~~~~~~~~~~~~~~ DB Id DB Name Inst Num Instanc ...

  5. Linux kernel启动选项(参数)(转)

    Linux kernel启动选项(参数)  转载链接https://www.cnblogs.com/linuxbo/p/4286227.html 在Linux中,给kernel传递参数以控制其行为总共 ...

  6. k8s之pod与Pod控制器

    k8s中最为重要的基础资源,pod,pod controller,service pod controller类型有多种需要向控制器赋值之后使用: kubectl命令使用 kubectk get no ...

  7. meibu ddns update command

    http://main.meibu.com/ip/login.asp?name=[USERNAME]&pwd=[PASSWORD]

  8. Python数据结构汇总

    Python数据结构汇总 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.线性数据结构 1>.列表(List) 在内存空间中是连续地址,查询速度快,修改也快,但不利于频繁新 ...

  9. eclipse项目结构目录

    文章:eclipse web 项目目录结构 地址:https://blog.csdn.net/Alan_Wdd/article/details/90514928 eclipse web 项目目录结构 ...

  10. python开发应用-本地数据获取方法

    文件的打开.读写和关闭 文件的打开: file_obj=open(filename,mode='r',buffering=-1,...) filename是强制参数 mode是可选参数,默认值是r b ...