当前位置: 首页 > news >正文

java14 使用增强的模式匹配切换表达式

野旷天低树,江清月近人。——唐代杜甫《月夜忆舍弟》

使用增强的模式匹配切换表达式(Switch Expressions with Enhanced Pattern Matching)

Java 14中引入的“Switch Expressions with Enhanced Pattern Matching”这个功能。

这个功能可以让我们在使用switch case语句时,同时进行类型检查和类型转换,从而简化代码。在之前的Java版本中,我们通常需要使用if-else语句或类型转换操作符来进行类型检查和类型转换。而在Java 14中,我们可以使用模式匹配(pattern matching)来进行这些操作,使得代码更加简洁和易读。

在使用switch case标签进行模式匹配时,我们需要使用模式变量来进行类型检查和类型转换。这个模式变量可以包含类型、常量和其他变量,以及与和或操作符。以下是一个使用模式匹配的示例代码:

Object obj = "Hello, World!";
if (obj instanceof String str && str.length() > 0) {int result = switch (str.charAt(0)) {case 'H', 'h' -> 1;case 'W', 'w' -> 2;case '!' -> 3;default -> 0;};System.out.println("Result: " + result);
}

在这个示例中,我们首先使用instanceof运算符进行类型检查,并将变量obj转换为字符串类型。然后,在switch表达式中,我们使用了模式匹配来检查字符串的第一个字符,并将其转换为int类型的结果。在case标签中,我们可以同时使用多个模式,从而简化代码并提高可读性。

需要注意的是,在进行模式匹配时,我们必须使用模式变量来进行类型检查和类型转换,否则会出现编译错误。另外,需要确保使用的Java版本支持“Switch Expressions with Enhanced Pattern Matching”这个功能。

总之,“Switch Expressions with Enhanced Pattern Matching”这个功能可以让我们更加方便地进行类型检查和类型转换,从而简化代码,提高代码的可读性和可维护性。

模式变量(pattern variable)

在Java 14中,模式变量被引入以增强模式匹配的功能,从而简化代码并提高可读性。当我们在if语句中使用instanceof运算符进行类型检查时,可以使用模式变量来同时进行类型转换,并且在if语句的作用域内,我们可以直接使用这个变量进行类型相关的操作。

以下是一个使用模式变量的示例代码:

Object obj = "Hello, World!";
if (obj instanceof String str && str.length() > 0) {System.out.println("The length of the string is " + str.length());
}

在这个示例中,我们首先使用instanceof运算符进行类型检查,并将变量obj转换为字符串类型。同时,我们在if语句的条件中使用了模式变量str,表示这个变量是一个字符串类型的变量,并将变量obj转换为了这个类型。在if语句的作用域内,我们可以直接使用这个变量来调用字符串类型的方法length(),从而获取字符串的长度。

需要注意的是,模式变量只能在if语句的条件中定义,并且不能重新赋值。同时,模式变量的作用域只限于if语句的作用域内。如果需要在其他作用域内使用这个变量,可以将其赋值给一个其他的变量。

总之,模式变量是Java 14中引入的一个新的功能,可以让我们更加方便地进行类型检查和类型转换,并且可以直接在if语句的作用域内使用相关的类型操作,从而简化代码,提高可读性和可维护性。

Switch Expressions with Enhanced Pattern Matching底层也是利用模式变量

Switch Expressions with Enhanced Pattern Matching底层也是利用模式变量实现的。在Switch Expressions with Enhanced Pattern Matching中,我们可以使用模式变量来进行类型检查和类型转换,并且可以在switch case标签中定义多个模式。

以下是一个使用模式变量的Switch Expressions with Enhanced Pattern Matching示例代码:

Object obj = "Hello, World!";
String result = switch (obj) {case String str && str.length() > 0 -> {yield "The string has length " + str.length();}case Integer i -> {yield "The object is an integer with value " + i;}default -> {yield "The object is of unknown type";}
};
System.out.println(result);

在这个示例中,我们首先定义了一个Object类型的变量obj,并在switch表达式中对这个变量进行模式匹配。在第一个case标签中,我们使用模式变量str来进行类型检查和类型转换,并检查字符串的长度。如果满足条件,我们使用yield返回一个字符串结果。在第二个case标签中,我们使用模式变量i来进行类型检查和类型转换,并返回一个字符串结果。在default标签中,我们返回一个未知类型的字符串结果。

需要注意的是,Switch Expressions with Enhanced Pattern Matching只能在Java 14及以上版本中使用,因为它是在Java 14中引入的一个新的功能。同时,模式变量的作用域只限于switch表达式的作用域内。

总之,Switch Expressions with Enhanced Pattern Matching底层也是利用模式变量实现的,它可以让我们更加方便地进行类型检查和类型转换,并且可以在switch case标签中定义多个模式,从而简化代码,提高可读性和可维护性。

http://www.lryc.cn/news/44810.html

相关文章:

  • python【正则表达式】
  • Ubuntu常见系统问题解决方式
  • C/C++中的虚拟内存
  • Qt C++与Python混合编程:补充错误
  • 2023-04-01:当Go语言遇见FFmpeg视频解码器,使用Go语言改写decode_video.c文件,提升视频解码效率与开发体验。
  • Solidity 学习笔记
  • ThreadLocal原理
  • 串操作指令详解 MOVS,LODS,STOS,CMPS,SCAS,REP
  • Java实现判断素数
  • PHP初级教程------------------(2)
  • 【SQL开发实战技巧】系列(三十五):数仓报表场景☞根据条件返回不同列的数据以及Left /Full Join注意事项
  • springBoot自动配置过程介绍
  • PostgreSQL最后的救命稻草 — pg_resetwal
  • 彻底关闭Windows更新
  • Java正则表达式语法
  • 【2023-3-29】JavaScript使用promise顺序调用函数并抛出异常
  • Python实现GWO智能灰狼优化算法优化随机森林分类模型(RandomForestClassifier算法)项目实战
  • 从redis到epoll到mmap
  • STM32CubeMX快速构造工程模板(一)
  • Java Web中的ServletContext对象
  • 回归预测 | MATLAB实现PSO-RF粒子群算法优化随机森林多输入单输出回归预测
  • 在小公司工作3年,从事软件测试5年了,才发现自己还是处于“初级“水平,是不是该放弃....
  • 基于 OpenCV 与 Java 两个语言版本实现获取某一图片特定区域的颜色对比度
  • Book:实战Java高并发程序设计(第二版)
  • LeetCode 831. Masking Personal Information【字符串,正则表达式】中等
  • 递增三元组
  • java源码阅读 - TreeSet
  • 写毕业论文经验贴
  • 2.7 进程退出、孤儿进程、僵尸进程+2.8 wait函数+2.9 waitpid函数
  • 【新2023Q2模拟题JAVA】华为OD机试 - 预订酒店