首页>资讯 > 图片资讯 > 正文

Java SE 20 新增特性

来源:博客园    2023-05-03 20:40:09

Java SE 20 新增特性

作者:Grey


(相关资料图)

原文地址:

博客园:Java SE 20 新增特性

CSDN:Java SE 20 新增特性

源码

源仓库: Github:java_new_features

镜像仓库: GitCode:java_new_features

Switch类型匹配(第四次预览)

在Java SE 17 新增特性中,Switch 类型匹配作为预览功能推出,到 Java SE 20 ,这个功能已经是第四次预览版,在 Java SE 17 中,可以通过加强 switch 表达式和语句的模式匹配能力,减少了定义这些表达式所需的模板,此外,switch 中增加了空值的支持。如下示例:

注:执行如下代码需要基于 Java SE 17 + ,且增加--enable-preview参数。

package git.snippets.jdk20;/** * switch类型匹配(二次预览) * * @author Grey * @date 2023/05/03 * @since 20 */public class SwitchMatchTest {    public static void main(String[] args) {        switchMatch(3);        switchMatch("HELLO");        switchMatch("hello world");        switchMatch(null);    }    static void switchMatch(Object obj) {        switch (obj) {            case String s when s.length() > 5 -> System.out.println(s.toUpperCase());            case String s -> System.out.println(s.toLowerCase());            case Integer i -> System.out.println(i * i);            case null -> System.out.println("null obj");            default -> {            }        }    }}
范围值(Scoped Value,孵化阶段)

JEP 429 在 Java SE 20 的孵化阶段引入了范围值(ScopedValue), 范围值可以与虚拟线程很好地结合。它允许在有限的时间内存储一个值,而且只有写入该值的线程可以读取它。类似ThreadLocal对于线程的作用。详见:SCOPED VALUES IN JAVA

record 的匹配增强(第二次预览)

record 的匹配增强首次预览在 Java SE 19, record 可以与 instanceof 一起使用,也可以使用 switch 来访问记录的字段,而无需强制转换和调用访问器方法,一个 record 的示例如下

package git.snippets.jdk20;/** * record 模式匹配增强(二次预览) * 需要增加 --enable-preview参数 * * @author Grey * @date 2022/9/22 * @since 19 */public class RecordTest {    public static void main(String[] args) {        Points points = new Points(1, 2);        Line line = new Line(new Points(1, 2), new Points(3, 4));        printPoints(points);        printLine(line);    }    private static void printPoints(Object object) {        if (object instanceof Points(int x, int y)) {            System.out.println("jdk 19 object is a position, x = " + x + ", y = " + y);        }        if (object instanceof Points points) {            System.out.println("pre jdk 19 object is a position, x = " + points.x()                    + ", y = " + points.y());        }        switch (object) {            case Points position -> System.out.println("pre jdk 19 object is a position, x = " + position.x()                    + ", y = " + position.y());            default -> throw new IllegalStateException("Unexpected value: " + object);        }        switch (object) {            case Points(int x, int y) -> System.out.println(" jdk 19 object is a position, x = " + x                    + ", y = " + y);            default -> throw new IllegalStateException("Unexpected value: " + object);        }    }    public static void printLine(Object object) {        if (object instanceof Line(Points(int x1, int y1), Points(int x2, int y2))) {            System.out.println("object is a path, x1 = " + x1 + ", y1 = " + y1                    + ", x2 = " + x2 + ", y2 = " + y2);        }        switch (object) {            case Line(Points(int x1, int y1), Points(int x2, int y2)) ->                    System.out.println("object is a path, x1 = " + x1 + ", y1 = " + y1                            + ", x2 = " + x2 + ", y2 = " + y2);            // other cases ...            default -> throw new IllegalStateException("Unexpected value: " + object);        }    }}record Points(int x, int y) {}record Line(Points from, Points to) {}

此外,在 JEP 432 中,Java SE 20 的 record 支持类型推断,例如,定义了如下数据结构

interface Multi {}record Tuple(T t1, T t2) implements Multi {}record Triple(T t1, T t2, T t3) implements Multi {}

在 Java SE 20 之前,需要这样做

// 需要指定类型    static void preJDK20(Multi multi) {        if (multi instanceof Tuple(var s1, var s2)) {            System.out.println("Tuple: " + s1 + ", " + s2);        } else if (multi instanceof Triple(var s1, var s2, var s3)) {            System.out.println("Triple: " + s1 + ", " + s2 + ", " + s3);        }    }

需要指定类型,例如:本实例需要指定 String 类型。

到了 Java SE 20,record 有类型推断,所以上述代码可以写成

static void JDK20(Multi multi) {        if (multi instanceof Tuple(var s1, var s2)) {            System.out.println("Tuple: " + s1 + ", " + s2);        } else if (multi instanceof Triple(var s1, var s2, var s3)) {            System.out.println("Triple: " + s1 + ", " + s2 + ", " + s3);        }    }

在循环中也可以支持类似的用法,示例如下:

在 Java SE 20 之前

record Position(int x, int y) {}static void preJDK20Loop(List positions) {    for (Position p : positions) {        System.out.printf("(%d, %d)%n", p.x(), p.y());    }}

在 Java SE 20 版本中,可直接写成如下形式

static void JDK20Loop(List positions) {        for (Position(int x, int y) : positions) {            System.out.printf("(%d, %d)%n", x, y);        }    }

此外,在 Java SE 20 中,移除了对 record 命名模式的支持,在 Java SE 19 中,如下写法是对的

if (object instanceof Points(int x, int y) points) {            System.out.println("pre jdk 19 object is a position, x = " + points.x()                    + ", y = " + points.y());        }

但是到了 Java SE 20 ,已经将上述写法废弃,Java SE 20 只支持如下两种写法

if (object instanceof Points(int x, int y)) {            System.out.println("jdk 19 object is a position, x = " + x + ", y = " + y);        }        if (object instanceof Points points) {            System.out.println("pre jdk 19 object is a position, x = " + points.x()                    + ", y = " + points.y());        }
废弃 java.net.URL 的构造方法

java.net.URL的构造函数已被标记为"废弃"。应该使用URI.create(..)URI.toURL()方法。下面是一个例子:

package git.snippets.jdk20;import java.net.URI;import java.net.URL;/** * URL的构造方法被彻底废弃 * * @author Grey * @date 2023/05/03 * @since 20 */public class URLConstructorTest {    public static void main(String[] args) throws Exception {        // 以下构造方法在 Java SE 20 被彻底废弃        // URL url = new URL("xxx");        // Java SE 20 用如下方法构造 URL        URL url = URI.create("xxx").toURL();    }}
更多

Java SE 7及以后各版本新增特性,持续更新中...

参考资料

Java Language Changes for Java SE 20

JDK 20 Release Notes

JAVA 20 FEATURES(WITH EXAMPLES)

关键词:

Java SE 20 新增特性

JavaSE20新增特性作者:Grey原文地址:博客园:JavaSE20新增特性CSDN:JavaSE20新增特性源码源仓库:Github

【热闻】聊聊“天儿” | 上班第一天 降温+降雨

今天是五一小长假的最后一天是不是很多朋友都在返程的路上?整体来看今天省内的温度比较给力全省大部气温都

天天新资讯:门卫大爷要求节假日3倍工资遭拒,法院:已退休,不属劳动关系

门卫大爷要求节假日3倍工资遭拒,法院:已退休,不属劳动关系,工资,法院,工资支付暂行规定,李大爷,物业公司

每日快讯!《Whale Studio 键圈联播》2023.05.03 刊

观众朋友们,晚上好!今天是5月3日星期三,农历三月十四,欢迎收看今日的《WhaleStudio键圈联播》,我是你

炒西瓜皮做法_炒西瓜皮怎么做好吃-当前信息

1、前言材料主料:西瓜皮663g;辅料:稻米油适量、食盐5g炒西瓜皮1将西瓜皮削去硬皮和残留的红瓤,切成合适

不断刷新磁共振成像技术极限 浙大教授吴丹获中国青年五四奖章 环球热资讯

潮新闻讯生物、工程、计算机……如何将这些专业有机的结合在一起,便是生物医学工程的研究内容。从“机缘巧

金观平:金融支持科技企业更精准 当前关注

来源:经济日报科技部火炬中心近日召开的企业创新积分制工作推进会透露了一组数据:2022年,前两批59家试点

理响中国|“党校公开课·党史启迪未来”系列短视频 伟大的开端:五四运动

详情请见:http: theory people com cn n1 2023 0503 c40531-32677527 html

全球短讯!美联储会议前瞻:继续加息板上钉钉?政策目标如何演变?|央行与货币

美联储会议前瞻:继续加息板上钉钉?政策目标如何演变?|央行与货币,加息,央行,货币政策,通胀数据,美联储

“中国经验具有启迪和借鉴意义”

全面推进乡村振兴是新时代中国建设农业强国的重要任务。近日,3位外国人士接受本报记者采访,结合他们在中

皮蛋怎么凉拌简单做法_凉拌皮蛋的家常做法 消息

1、前言皮蛋在我们老家又称变鸡蛋,老公和儿子都很喜欢吃,南方人都不怎么喜欢吃,但是在我们北方这却是个

葛布_关于葛布的简介

1、葛布,原名廉梦,1988年11月1日出生于吉林省吉林市,内地女演员,毕业于中国青年政治学院 。2、2013年8

环球报道:黄金金价调整:2023年05月03日,国内各大金店品牌黄金最新金价表

黄金最新金价,2023年05月03日,老庙黄金、老凤祥、周六福珠宝、周大福、周生生、亚一金店、六福珠宝、菜百

中化集团鲁西化工双氧水生产区爆炸火灾事故共造成9人死亡、1人受伤、1人失联

聊城高新区官微消息,聊城高新区管委会通报,5月1日中午12时20分,中化集团鲁西化工双氧水生产区爆炸着火事

动态焦点:45奇迹sf发布网 45奇迹sf最新开服手游推荐

,,小编为大家整理的最好玩的奇迹手游排行榜,经典三大职业的加入,以及副本的解锁开放,可以让你在手游中

每日消息!小鸡宝宝考考你诗句“愿得—心人,白头不相离”的作者是

年货节还差红包吗?送上红包帮你买年货!诗句“愿得—心人,白头不相离”的作者是卓文君李清照正确答案:卓

北京南站自驾送人(北京南站开车送站哪个进站口方便)_天天热讯

1 北京南站开车送站哪个进站口方便可以进的但貌似要排队的,时间不紧张还好。不怕走路的话就去北广场的东配

正式确定!郭士强留在广州队,签下多年合同,重返辽篮无望

郭士强确定留在广州队最近有很多郭士强要离开广州龙狮俱乐部的消息,目前确实有不少俱乐部邀请郭士强加盟,

世界观速讯丨纂怎么写_纂

1、基本解释:搜集材料编书:纂修。2、2、古代指红色或彩色丝带。3、3、妇女梳在头后边的发髻:纂儿。4、4

环球观点:Ai绘画破解版(ai绘画破解版app)

如何破解昵图网下载矢量文件?最好是AI,CDR,PSD等格式直接下载能用的_百 1、方法一浏览器下载:打开你要的

沈阳故宫百年戏台上演传统戏曲 每日热讯

中新社沈阳5月3日电(记者韩宏)拥有逾200年历史的沈阳故宫戏台,3日上演了传统评剧《打金枝》,观众沉浸式体

拉芳家化:2022年净利润5923万 盈利质量持续向好

证券时报网讯,拉芳家化(603630)4月底发布了2022年年度报告。公司2022年实现营业收入8 87亿元,归母净利润5

今日关注:官方:曼联传奇费迪南德入选2023年英超名人堂

官方:曼联传奇费迪南德入选2023年英超名人堂,曼联,英超联赛,英超名人堂,里奥·费迪南德

重庆秀山:特色民俗活动助力“五一”乡村旅游

01:29“五一”期间,地处重庆、贵州、湖南交界处的重庆市秀山土家族苗族自治县洪安镇边城景区举办《边城》

太仓:“四链”融合激活创新因子|全球快资讯

□苏报驻太仓记者顾志敏周哲日前,国家第二批创新型县(市)建设名单公布,太仓位列其中。“国家级”名片的

火影忍者究极风暴4怎么换人上场_火影忍者究极风暴4怎么换人

1、你好,火影究极风暴4换人按如下操作:LB、RB是召唤设定好的队员支援,但是召唤后是不能操作的。2、想要

全球最新:张之臻创中国男网新历史具体是什么情况

很多人对张之臻创中国男网新历史具体是什么情况比较关心,现在让我们一起来瞧瞧具体是什么情况吧!1、北京

全球速看:中国黄金投资金条价格今天多少一克(2023年05月03日)

金投网提供中国黄金投资金条价格今天多少一克(2023年05月03日),中国黄金投资金条价格最新消息(2023年05

今日最新!东北三省:“三驾马车”动力渐强

日前,工人在黑龙江鸡西哈工高碳石墨材料有限公司生产车间工作。新华社记者张涛摄4 7%、8 2%、5 1%,这是今

“五一”假期沈阳故宫博物院迎来参观热潮_当前独家

“五一”假期,沈阳故宫博物院迎来参观热潮,为提升观众参观体验,丰富群众假日生活,沈阳故宫这个假期推出

综合资讯

+更多

热点资讯

+更多
股票价格上涨是什么决定的?股票突然拉升是怎么回事?
股票价格上涨是什么决定的?股票价格上涨主要是由供求关系决定的,就跟买菜一样,买菜的人多了但是供给的菜不足,菜价必然上升;当人们对菜的 [详细]

Copyright @ 2008-2020  www.43710.com   All Right Reserved Powered by 财经情报网 版权所有

财经情报网   联系邮箱:562 66 29@qq.com

网站备案:沪ICP备2020036824号-12