百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

详解 Java 19 中 switch 的模式匹配

toyiye 2024-08-31 03:02 7 浏览 0 评论

#头条创作挑战赛#

关于 Java 的模式匹配,我在之前的几篇文章中做了一些介绍, 包括 详解 Java 17 中的模式匹配(Pattern Matching)详解 Java 19 中的记录类型的模式匹配。模式匹配是一个很大的话题,基本上每个 Java 版本都会有一些与模式匹配相关的改动。Java 19 中除了新的记录类型模式之外,对 switch 的模式匹配也进行了一些修改。

switch 模式匹配最早在 Java 17 中以预览功能的形式引入,在 Java 18中进行了二次预览,在 Java 19 中仍然还是预览的。与其他的功能相比,switch 模式匹配的预览时间较长。不过对 switch 模式匹配的使用,本来就需要等到下一个 LTS Java 21,因此拖延一个版本也没什么问题。

switch 模式匹配所要实现的功能很好理解,就是允许在 switch 的 case 标签中使用模式来表示匹配的条件。如果匹配成功,就运行 case 标签之后的代码。我们要做的就是正确地描述模式即可。

在 Java 19 中,switch 的模式匹配中有如下改动。

首先在 case 中可以使用 null,可以显式地对 null 进行判断,不再需要添加额外的 null 检查。

目前在 switch 中仅能使用类型模式,也就是判断参数的类型,再执行对应的操作。下面的代码给出了 switch 中使用类型模式的基本用法。

public void test(Object input) {
    switch (input) {
        case null -> System.out.println("null");
        case String s -> System.out.println(s.toLowerCase());
        case Integer i -> System.out.println(i.intValue());
        default -> System.out.println("default");
    }
}

在进行类型匹配时,一个常见的需求是对类型匹配成功的对象,再执行进一步的检查,来确定需要执行的动作。这种额外的检查条件,称为模式匹配时的守卫条件(guard)。在 Java 19 之前,守卫条件使用的是 && 来表示。在 Java 19 中,改成了使用 when 来表示。when 后面紧接着的是 boolean 类型的表达式。

在下面的代码中,对于 String 类型的判断有3个 case 标签,前面两个使用了 when 来匹配不同类型的 String 对象,最后一个没有使用 when,用来匹配遗漏的 String 对象。

public void test(Object input) {
    switch (input) {
        case null -> System.out.println("null");
        case String s when s.length() > 100 || s.length() < 10 -> System.out.println(s.toLowerCase());
        case String s when s.length() < 50 -> System.out.println(s.toUpperCase());
        case String s -> System.out.println(s);
        case Integer i -> System.out.println(i.intValue());
        default -> System.out.println("default");
    }
}

switch 中的 case 标签必须是完备,也就是说涵盖所有的情况。在引入了模式匹配之后,对 case 标签完备性的检查变得更复杂了。当标签不完备时,编译器会给出错误。当然了,我们总是可以添加一个 default 标签来确保处理了全部可能的情况。

在引入了模式匹配之后,不同 case 标签所匹配的对象范围可能产生重叠。比如 case String s when s.length() < 50 和 case String s 这两个标签,很明显可以看出来,满足后一个标签的对象,必然满足前一个标签。这个时候,我们称之为 case String s 支配了 case String s when s.length() < 50。对于这种情况,编译器要求被支配的 case 标签必须出现在支配它的 case 标签之前。也就是说,case String s when s.length() < 50 必须出现在 case String s 之前,否则会产生编译错误。

Java 19 新增的记录类型的模式匹配(详解 Java 19 中的记录类型的模式匹配),也可以用在 switch 中。在下面的代码中,GeoLocation 是记录类型,可以用在 case 标签中,并直接提取其中的 lng 和 lat 组件的值。

public void test(Object input) {
    switch (input) {
        case null -> System.out.println("null");
        case String s -> System.out.println(s);
        case GeoLocation(var lng,var lat) -> System.out.println(lng + ", " + lat);
        default -> System.out.println("default");
    }
}

Java 19 中可以使用的 switch 模式匹配就介绍到这里了。在以后的版本中,可能会有更多的模式被添加进来。

相关推荐

# Python 3 # Python 3字典Dictionary(1)

Python3字典字典是另一种可变容器模型,且可存储任意类型对象。字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中,格式如...

Python第八课:数据类型中的字典及其函数与方法

Python3字典字典是另一种可变容器模型,且可存储任意类型对象。字典的每个键值...

Python中字典详解(python 中字典)

字典是Python中使用键进行索引的重要数据结构。它们是无序的项序列(键值对),这意味着顺序不被保留。键是不可变的。与列表一样,字典的值可以保存异构数据,即整数、浮点、字符串、NaN、布尔值、列表、数...

Python3.9又更新了:dict内置新功能,正式版十月见面

机器之心报道参与:一鸣、JaminPython3.8的热乎劲还没过去,Python就又双叒叕要更新了。近日,3.9版本的第四个alpha版已经开源。从文档中,我们可以看到官方透露的对dic...

Python3 基本数据类型详解(python三种基本数据类型)

文章来源:加米谷大数据Python中的变量不需要声明。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。在Python中,变量就是变量,它没有类型,我们所说的"类型"是变...

一文掌握Python的字典(python字典用法大全)

字典是Python中最强大、最灵活的内置数据结构之一。它们允许存储键值对,从而实现高效的数据检索、操作和组织。本文深入探讨了字典,涵盖了它们的创建、操作和高级用法,以帮助中级Python开发...

超级完整|Python字典详解(python字典的方法或操作)

一、字典概述01字典的格式Python字典是一种可变容器模型,且可存储任意类型对象,如字符串、数字、元组等其他容器模型。字典的每个键值key=>value对用冒号:分割,每个对之间用逗号,...

Python3.9版本新特性:字典合并操作的详细解读

处于测试阶段的Python3.9版本中有一个新特性:我们在使用Python字典时,将能够编写出更可读、更紧凑的代码啦!Python版本你现在使用哪种版本的Python?3.7分?3.5分?还是2.7...

python 自学,字典3(一些例子)(python字典有哪些基本操作)

例子11;如何批量复制字典里的内容2;如何批量修改字典的内容3;如何批量修改字典里某些指定的内容...

Python3.9中的字典合并和更新,几乎影响了所有Python程序员

全文共2837字,预计学习时长9分钟Python3.9正在积极开发,并计划于今年10月发布。2月26日,开发团队发布了alpha4版本。该版本引入了新的合并(|)和更新(|=)运算符,这个新特性几乎...

Python3大字典:《Python3自学速查手册.pdf》限时下载中

最近有人会想了,2022了,想学Python晚不晚,学习python有前途吗?IT行业行业薪资高,发展前景好,是很多求职群里严重的香饽饽,而要进入这个高薪行业,也不是那么轻而易举的,拿信工专业的大学生...

python学习——字典(python字典基本操作)

字典Python的字典数据类型是基于hash散列算法实现的,采用键值对(key:value)的形式,根据key的值计算value的地址,具有非常快的查取和插入速度。但它是无序的,包含的元素个数不限,值...

324页清华教授撰写【Python 3 菜鸟查询手册】火了,小白入门字典

如何入门学习python...

Python3.9中的字典合并和更新,了解一下

全文共2837字,预计学习时长9分钟Python3.9正在积极开发,并计划于今年10月发布。2月26日,开发团队发布了alpha4版本。该版本引入了新的合并(|)和更新(|=)运算符,这个新特性几乎...

python3基础之字典(python中字典的基本操作)

字典和列表一样,也是python内置的一种数据结构。字典的结构如下图:列表用中括号[]把元素包起来,而字典是用大括号{}把元素包起来,只不过字典的每一个元素都包含键和值两部分。键和值是一一对应的...

取消回复欢迎 发表评论:

请填写验证码