JDK23新特性:通过原始类型模式提升代码编写效率

2024-06-10 09:52

本文主要是介绍JDK23新特性:通过原始类型模式提升代码编写效率,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在JEP455中包含了通过增强switch语句,简化了代码编写,以及提高了代码的可读性。

1.相关优化

  • 原始类型模式:您可以int, long, boolean在模式匹配结构中直接使用原始类型(例如 等)。这样就无需对值进行不必要的装箱和拆箱。
  • 扩展的instanceof和switch :运算instanceof符和switch表达式已经扩展,可以与原始类型无缝协作。

2.示例

2.1.业务背景

以用户订单服务系统为例。

2.2.实现源码

void main() {var user = new User(12345L, true);  //loggedIn userstartProcessing(OrderStatus.NEW, switch (user.loggedIn()) {case true -> user.id();case false -> {log("Unrecognized user");yield -1;}});user = new User(0L, false); //not loggedIn userstartProcessing(OrderStatus.NEW, switch (user.loggedIn()) {case true -> user.id();case false -> {log("Unrecognized user");yield -1;}});
}void startProcessing(OrderStatus orderStatus, long userId) {switch (userId) {case -1L -> System.out.println("Unrecognized User. Unable to process order.");default -> {var message = switch (orderStatus) {case NEW -> "Order for User %s is received and will start processing";case PROCESSING -> "Order for User %s is being processed.";case DISPATCHED, DELIVERED -> "Order for User %s has already been processed";};log(String.format(message, userId));}}
}void log(String message) {println(message);
}public enum OrderStatus {NEW,PROCESSING,DISPATCHED,DELIVERED
}record User(long id, boolean loggedIn) {
}

2.3.源码解读

创建一个具有 ID 和loggedIn状态的 User 对象。方法内的 switch 表达式startProcessing检查用户是否已登录:

  • 如果用户已登录,则使用其 ID 进行处理;
  • 如果未登录,则生成一条日志消息,并产生 -1 以指示无法识别的用户。然后 startProcessing 方法使用另一个 switch 语句来处理不同的 OrderStatus 值。

根据订单状态打印适当的消息。

2.4.源码编译及运行

注意:这是一项预览语言功能,可通过 JDK 23 编译器和运行时的 --enable-preview 标志使用。要在 JDK 23 中尝试上述示例,您必须启用预览功能:

  • 编译程序javac --release 23 --enable-preview OrderService.java并使用 运行它 java --enable-preview OrderService;
  • 使用源代码启动器时,使用 运行程序java --enable-preview OrderService.java;
  • 当使用jshell时,用 jshell 启动它–enable-preview。

3.总结

随着 Java 的不断发展,JEP 455 等功能体现了该语言致力于实现现代化和提高开发人员生产力的承诺。利用这些变化可以编写更高效、更易读的代码,并在不断发展的 Java 开发领域保持领先地位。

这篇关于JDK23新特性:通过原始类型模式提升代码编写效率的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1047840

相关文章

Spring Boot 配置文件之类型、加载顺序与最佳实践记录

《SpringBoot配置文件之类型、加载顺序与最佳实践记录》SpringBoot的配置文件是灵活且强大的工具,通过合理的配置管理,可以让应用开发和部署更加高效,无论是简单的属性配置,还是复杂... 目录Spring Boot 配置文件详解一、Spring Boot 配置文件类型1.1 applicatio

Spring Boot 3.4.3 基于 Spring WebFlux 实现 SSE 功能(代码示例)

《SpringBoot3.4.3基于SpringWebFlux实现SSE功能(代码示例)》SpringBoot3.4.3结合SpringWebFlux实现SSE功能,为实时数据推送提供... 目录1. SSE 简介1.1 什么是 SSE?1.2 SSE 的优点1.3 适用场景2. Spring WebFlu

java之Objects.nonNull用法代码解读

《java之Objects.nonNull用法代码解读》:本文主要介绍java之Objects.nonNull用法代码,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录Java之Objects.nonwww.chinasem.cnNull用法代码Objects.nonN

SpringBoot实现MD5加盐算法的示例代码

《SpringBoot实现MD5加盐算法的示例代码》加盐算法是一种用于增强密码安全性的技术,本文主要介绍了SpringBoot实现MD5加盐算法的示例代码,文中通过示例代码介绍的非常详细,对大家的学习... 目录一、什么是加盐算法二、如何实现加盐算法2.1 加盐算法代码实现2.2 注册页面中进行密码加盐2.

python+opencv处理颜色之将目标颜色转换实例代码

《python+opencv处理颜色之将目标颜色转换实例代码》OpenCV是一个的跨平台计算机视觉库,可以运行在Linux、Windows和MacOS操作系统上,:本文主要介绍python+ope... 目录下面是代码+ 效果 + 解释转HSV: 关于颜色总是要转HSV的掩膜再标注总结 目标:将红色的部分滤

新特性抢先看! Ubuntu 25.04 Beta 发布:Linux 6.14 内核

《新特性抢先看!Ubuntu25.04Beta发布:Linux6.14内核》Canonical公司近日发布了Ubuntu25.04Beta版,这一版本被赋予了一个活泼的代号——“Plu... Canonical 昨日(3 月 27 日)放出了 Beta 版 Ubuntu 25.04 系统镜像,代号“Pluc

在C#中调用Python代码的两种实现方式

《在C#中调用Python代码的两种实现方式》:本文主要介绍在C#中调用Python代码的两种实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C#调用python代码的方式1. 使用 Python.NET2. 使用外部进程调用 Python 脚本总结C#调

SpringBoot如何通过Map实现策略模式

《SpringBoot如何通过Map实现策略模式》策略模式是一种行为设计模式,它允许在运行时选择算法的行为,在Spring框架中,我们可以利用@Resource注解和Map集合来优雅地实现策略模式,这... 目录前言底层机制解析Spring的集合类型自动装配@Resource注解的行为实现原理使用直接使用M

Java时间轮调度算法的代码实现

《Java时间轮调度算法的代码实现》时间轮是一种高效的定时调度算法,主要用于管理延时任务或周期性任务,它通过一个环形数组(时间轮)和指针来实现,将大量定时任务分摊到固定的时间槽中,极大地降低了时间复杂... 目录1、简述2、时间轮的原理3. 时间轮的实现步骤3.1 定义时间槽3.2 定义时间轮3.3 使用时

Java中&和&&以及|和||的区别、应用场景和代码示例

《Java中&和&&以及|和||的区别、应用场景和代码示例》:本文主要介绍Java中的逻辑运算符&、&&、|和||的区别,包括它们在布尔和整数类型上的应用,文中通过代码介绍的非常详细,需要的朋友可... 目录前言1. & 和 &&代码示例2. | 和 ||代码示例3. 为什么要使用 & 和 | 而不是总是使