Java 14 即将发布,正式加入新的 Switch 表达式
wxin55 2024-11-02 13:55 13 浏览 0 评论
依照 6 个月的发布周期,甲骨文预计在 3 月 17 日时推出 Java 14,这个版本有三个主要的更新,第一个便是在 Java 12 新增的预览功能 Switch 表达式,在 Java 14 中成熟成为正式功能,第二个则是新增的语言功能,为 instanceof 增加模式配对,第三个则是 JVM 的功能,提供有用的 NullPointerExceptions 信息。
由于 Java 旧的 Switch 表达式有几个问题,因此官方在 Java 12 的时候,加入新的 Switch 表达式语法预览版,要让 Switch 更好用。Switch 表达式语法包含 case 以及 break 陈述式,条件配对由上往下执行,一旦进到特定 case 中,break 陈述式会确保下一个 case 区块不会被执行,但是当开发者忘记写 break,执行流程会继续往下走,直到碰到下一个 break,这个现象被称为穿透(Fall-through)。
而在新的 Switch 表达式中,使用了新的语法来避免穿透发生的可能性,因此能够降低可能产生臭虫的机率。新的 Switch 格式使用 Lambda 风格的语法,该语法由标签和回传值代码间的箭头组成,但官方强调,这个并非真正的 Lambda 表达式,只是类似而已。
Java 12 之前,Switch 表达式中每一个 case 只能使用一个标签,因此尽管不同标签的处理逻辑相同,仍需要分开写成两个 case 区块,或是故意利用穿透现象来达成目的,但是故意使用穿透可能会造成误解,因为在部分情况会难以判断缺少 break 陈述式是故意的还是无意的。而在新的 Switch 表达式中,现在可以在 case 使用多个标签处理这样的情况。
官方表示,新的 Switch 表达式也更加详尽安全,当开发者在 Switch 中使用 enum 时,编译器会检查 case 是否列举所有 enum 中的值,当创建的 switch 没有涵盖所有的值,则会出现编译器错误,这个错误可以提醒开发者处理遗漏的情况。
另外,Switch 在 Java 12 之前只是一个陈述式,而现在则可做为一个表达式使用。官方提到,陈述式的本质是动作,而表达式的本质则是请求产生一个值,表达式越基本容易理解,也会使得代码更容易维护。而现在开发者可以把 switch 撰写成简洁的表达式,以更好的表明代码的意图。
Java 14 为 instanceof 加入模式配对,这个功能可减少有条件 instanceof 检查,进行强制转换的需要。模式配对是让开发者能够测试值的样子,并在符合特定规则的时候取出信息,在测试参数以确定其类型时,会经过转换,并宣告区域变数,以便后续利用特定类型进行处理。
这个新的语言功能,则是让开发者从物件中有条件的取出元件变得简单,使语法更加简单可读,官方表示,这个预览功能为广泛的模式配对开了一个门,模式配对的中心思想,就是要提供一个功能,可以简单地根据条件,从物件中取出元件,而 instanceof 运算子就是这样的功能。
Java 14 加入新的 JVM 功能,让开发者可以获取更多可用于诊断错误的信息,在 Java 14 之前, NullPointerException 信息含糊不清,无法明确的让开发者知道程序问题所在。而现在,信息至少会包含问题发生的位置和原因两类信息。这项功能不止可用于方法调用,还可用于其他可能导致 NullPointerException 的地方,包括栏位存取、阵列存取和赋值。
编辑:AI智慧
相关推荐
- ES6中 Promise的使用场景?(es6promise用法例子)
-
一、介绍Promise,译为承诺,是异步编程的一种解决方案,比传统的解决方案(回调函数)更加合理和更加强大在以往我们如果处理多层异步操作,我们往往会像下面那样编写我们的代码doSomething(f...
- JavaScript 对 Promise 并发的处理方法
-
Promise对象代表一个未来的值,它有三种状态:pending待定,这是Promise的初始状态,它可能成功,也可能失败,前途未卜fulfilled已完成,这是一种成功的状态,此时可以获取...
- Promise的九大方法(promise的实例方法)
-
1、promise.resolv静态方法Promise.resolve(value)可以认为是newPromise方法的语法糖,比如Promise.resolve(42)可以认为是以下代码的语...
- 360前端一面~面试题解析(360前端开发面试题)
-
1.组件库按需加载怎么做的,具体打包配了什么-按需加载实现:借助打包工具(如Webpack的require.context或ES模块动态导入),在使用组件时才引入对应的代码。例如在V...
- 前端面试-Promise 的 finally 怎么实现的?如何在工作中使用?
-
Promise的finally方法是一个非常有用的工具,它无论Promise是成功(fulfilled)还是失败(rejected)都会执行,且不改变Promise的最终结果。它的实现原...
- 最简单手写Promise,30行代码理解Promise核心原理和发布订阅模式
-
看了全网手写Promise的,大部分对于新手还是比较难理解的,其中几个比较难的点:状态还未改变时通过发布订阅模式去收集事件实例化的时候通过调用构造函数里传出来的方法去修改类里面的状态,这个叫Re...
- 前端分享-Promise可以中途取消啦(promise可以取消吗)
-
传统Promise就像一台需要手动组装的设备,每次使用都要重新接线。而Promise.withResolvers的出现,相当于给开发者发了一个智能遥控器,可以随时随地控制异步操作。它解决了三大...
- 手写 Promise(手写输入法 中文)
-
前言都2020年了,Promise大家肯定都在用了,但是估计很多人对其原理还是一知半解,今天就让我们一起实现一个符合PromiseA+规范的Promise。附PromiseA+规范地址...
- 什么是 Promise.allSettled()!新手老手都要会?
-
Promise.allSettled()方法返回一个在所有给定的promise都已经fulfilled或rejected后的promise,并带有一个对象数组,每个对象表示对应的pr...
- 前端面试-关于Promise解析与高频面试题示范
-
Promise是啥,直接上图:Promise就是处理异步函数的API,它可以包裹一个异步函数,在异步函数完成时抛出完成状态,让代码结束远古时无限回掉的窘境。配合async/await语法糖,可...
- 宇宙厂:为什么前端离不开 Promise.withResolvers() ?
-
大家好,很高兴又见面了,我是"高级前端进阶",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发。1.为什么需要Promise.with...
- Promise 新增了一个超实用的 API!
-
在JavaScript的世界里,Promise一直是处理异步操作的神器。而现在,随着ES2025的发布,Promise又迎来了一个超实用的新成员——Promise.try()!这个新方法简...
- 一次搞懂 Promise 异步处理(promise 异步顺序执行)
-
PromisePromise就像这个词的表面意识一样,表示一种承诺、许诺,会在后面给出一个结果,成功或者失败。现在已经成为了主流的异步编程的操作方式,写进了标准里面。状态Promise有且仅有...
- Promise 核心机制详解(promise机制的实现原理)
-
一、Promise的核心状态机Promise本质上是一个状态机,其行为由内部状态严格管控。每个Promise实例在创建时处于Pending(等待)状态,此时异步操作尚未完成。当异步操作成功...
- javascript——Promise(js实现promise)
-
1.PromiseES6开始支持,Promise对象用于一个异步操作的最终完成(包括成功和失败)及结果值的表示。简单说就是处理异步请求的。之所以叫Promise,就是我承诺,如果成功则怎么处理,失败怎...
你 发表评论:
欢迎- 一周热门
- 最近发表
-
- ES6中 Promise的使用场景?(es6promise用法例子)
- JavaScript 对 Promise 并发的处理方法
- Promise的九大方法(promise的实例方法)
- 360前端一面~面试题解析(360前端开发面试题)
- 前端面试-Promise 的 finally 怎么实现的?如何在工作中使用?
- 最简单手写Promise,30行代码理解Promise核心原理和发布订阅模式
- 前端分享-Promise可以中途取消啦(promise可以取消吗)
- 手写 Promise(手写输入法 中文)
- 什么是 Promise.allSettled()!新手老手都要会?
- 前端面试-关于Promise解析与高频面试题示范
- 标签列表
-
- hive行转列函数 (63)
- sourcemap文件是什么 (54)
- display none 隐藏后怎么显示 (56)
- 共享锁和排他锁的区别 (51)
- httpservletrequest 获取参数 (64)
- jstl包 (64)
- qsharedmemory (50)
- watch computed (53)
- java中switch (68)
- date.now (55)
- git-bash (56)
- 盒子垂直居中 (68)
- npm是什么命令 (62)
- python中+=代表什么 (70)
- fsimage (51)
- nginx break (61)
- mysql分区表的优缺点 (53)
- centos7切换到图形界面 (55)
- 前端深拷贝 (62)
- kmp模式匹配算法 (57)
- jsjson字符串转json对象 (53)
- jdbc connection (61)
- javascript字符串转换为数字 (54)
- mybatis 使用 (73)
- 安装mysql数据库 (55)