Java 21 特性及示例

简介: 本文介绍了 Java 21 的新特性,包括字符串模板、顺序集合、记录模式和 switch 模式匹配,通过示例展示其用法和优势,帮助开发者提升代码简洁性与可读性,是升级至 JDK 21 的实用指南。

探索 Java 21 中令人兴奋的新功能:示例和见解

Java 21 特性及示例

本文全面概述了 JDK 21 中引入的新功能,这些新功能由 Java Community Process 中的 JSR 396 指定。从语言改进到性能优化,这些功能旨在提高 Java 开发的生产力、灵活性和效率。让我们深入了解细节并探索 JDK 21 中令人兴奋的进步。

1.字符串模板(预览版):
字符串模板计划作为 JDK 21 中的预览功能引入,旨在简化 Java 中字符串格式化和操作的过程。此功能使开发人员能够将表达式直接合并到字符串文字中,从而方便复杂字符串的创建和格式化。在下面的博客文章中,我们将深入探讨字符串模板的概念,提供实用的说明,帮助 Java 开发人员接受和利用这一强大附加功能的功能。

让我们探索一个不同的示例来展示字符串模板在执行高级格式化方面的强大功能。考虑一个场景,您想要显示产品的信息,包括其名称、价格和可用性状态。传统上,您可以使用运算符连接多个字符串+:

// Java 21 之前的
String productName="Widget";
double productPrice=29.99;
boolean productAvailable=true;
String productInfo="Product: " + productName + "\nPrice: $" + productPrice + "\nAvailability: " + (productAvailable ? "In Stock" : "Out of Stock");
System.out.println(productInfo);

使用字符串模板,您可以简化格式化过程并使代码更具可读性:

// 从 Java 21 开始
String productName = "Widget";
double productPrice = 29.99;
boolean productAvailable = true;
String productInfo = `Product: ${productName}
Price: $${productPrice}
Availability: ${productAvailable ? "In Stock" : "Out of Stock"}`;
System.out.println(productInfo);

在此示例中,我们使用字符串模板将变量productName、productPrice、 和productAvailable直接嵌入字符串文字中。表达式包含在其中${},并且可以包含其他格式,例如在 之前添加美元符号productPrice。生成的字符串更简洁、更易于阅读,并且无需显式连接和格式化操作。

2. Sequenced Collections

在 JDK 21 中,Sequenced Collections 的引入带来了新的接口和方法来简化和简化集合处理。此增强功能旨在解决访问 Java 中各种集合类型的第一个和最后一个元素需要非统一且有时很麻烦的方法的常见场景。本文通过不同集合处理场景的示例探讨了顺序集合功能及其优点。

Sequenced Collections 接口
Sequenced Collections 引入了三个新接口:SequencedSet、SequencedCollection 和 SequencedMap。这些接口附带了其他方法,可以提供改进的集合访问和操作功能。

访问第一个和最后一个元素

在 JDK 21 之前,在 Java 中检索集合的第一个和最后一个元素涉及不同的方法和途径,具体取决于集合类型。让我们看一下使用 JDK 21 之前的 JDK API 调用访问第一个和最后一个元素的一些示例:

对于list
第一个元素 — list.get(0)
最后一个元素 — list.get(list.size()-1)

对于 Deque
第一个元素 — deque.getFirst()
最后一个元素 — deque.getLast()

对于 Set
第一个元素 — set.iterator().next() 或 set.stream().findFirst().get()
最后一个元素 — 需要迭代集合

对于 SortedSet
第一个元素 — set.first()
最后一个元素 — set.last()

随着 JDK 21 和顺序集合功能的引入,访问第一个和最后一个元素变得更加一致和直接。新方法简化了不同集合类型的流程:

对于列表、双端队列、设置
第一个元素 — collection.getFirst()
最后一个元素 — collection.getLast()

3. 记录模式使用
记录模式来解构记录值,从而增强 Java 编程语言。记录模式和类型模式可以嵌套,以实现强大的、声明性的、可组合形式的数据导航和处理。

模式匹配和记录

// 从 Java 16 开始,
record  Point ( int x, int y) {} 
static  void  printSum (Object obj) { 
    if (obj instanceof Point p) { 
        int  x  = px(); 
        int  y  = py(); 
        System.out.println(x+y); 
    } 
}

此处的模式变量p仅用于调用访问器方法x()和y(),该方法返回组件x和的值y。(在每个记录类中,其访问器方法与其组件之间都存在一一对应的关系。)如果该模式不仅能够测试某个值是否是 的实例,而且还能够从该值中提取 和 组件,那就Point更好x了y直接代表我们调用访问器方法。换句话说:

// 从 Java 21 开始
static  void  printSum (Object obj) { 
    if (obj instanceof  Point ( int x, int y) ) { 
        System.out.println(x+y); 
    } 
}

4. switch 的模式匹配

switch通过表达式和语句的模式匹配增强 Java 编程语言。扩展模式匹配switch允许针对多个模式测试表达式,每个模式都有一个特定的操作,以便可以简洁、安全地表达复杂的面向数据的查询。

// Java 21 之前的
static String formatter(Object obj) {
    Stringformatted="unknown";
    if (obj instanceof Integer i) {
        formatted = String.format("int %d", i);
    } elseif (obj instanceof Long l) {
        formatted = String.format("long %d", l);
    } elseif (obj instanceof Double d) {
        formatted = String.format("double %f", d);
    } elseif (obj instanceof String s) {
        formatted = String.format("String %s", s);
    }
    return formatted;
}

但switch是一个完美的匹配模式!如果我们扩展switch语句和表达式以适用于任何类型,并允许case使用模式标签而不仅仅是常量,那么我们可以更清晰可靠地重写上面的代码:

// 从 Java 21 开始
static String formatterPatternSwitch(Object obj) {
    returnswitch (obj) {
        case Integer i -> String.format("int %d", i);
        case Long l    -> String.format("long %d", l);
        case Double d  -> String.format("double %f", d);
        case String s  -> String.format("String %s", s);
        default        -> obj.toString();
    };
}

总结:

总而言之,jdk21的新特性还是非常令人期待的,有心动的吗,心动的话就赶紧升级jdk21吧,如果你要升级,那就直接跳过jdk11和jdk17,建议直接选择jdk21,因为实在是太香了

相关文章
|
6月前
|
Java 开发工具
【Azure Storage Account】Java Code访问Storage Account File Share的上传和下载代码示例
本文介绍如何使用Java通过azure-storage-file-share SDK实现Azure文件共享的上传下载。包含依赖引入、客户端创建及完整示例代码,助你快速集成Azure File Share功能。
462 6
|
7月前
|
IDE Java 关系型数据库
Java 初学者学习路线(含代码示例)
本教程为Java初学者设计,涵盖基础语法、面向对象、集合、异常处理、文件操作、多线程、JDBC、Servlet及MyBatis等内容,每阶段配核心代码示例,强调动手实践,助你循序渐进掌握Java编程。
870 3
|
7月前
|
Java API 数据处理
Java新特性:使用Stream API重构你的数据处理
Java新特性:使用Stream API重构你的数据处理
|
7月前
|
Java
java入门代码示例
本文介绍Java入门基础,包含Hello World、变量类型、条件判断、循环及方法定义等核心语法示例,帮助初学者快速掌握Java编程基本结构与逻辑。
543 0
|
9月前
|
安全 Java 网络安全
Java 实现 SMTP 协议调用的详细示例及实战指南 SMTP Java 调用示例
本文介绍了如何使用Java调用SMTP协议发送邮件,涵盖SMTP基本概念、JavaMail API配置、代码实现及注意事项,适合Java开发者快速掌握邮件发送功能集成。
1034 0
|
9月前
|
并行计算 Java API
Java List 集合结合 Java 17 新特性与现代开发实践的深度解析及实战指南 Java List 集合
本文深入解析Java 17中List集合的现代用法,结合函数式编程、Stream API、密封类、模式匹配等新特性,通过实操案例讲解数据处理、并行计算、响应式编程等场景下的高级应用,帮助开发者提升集合操作效率与代码质量。
394 1
|
9月前
|
算法 搜索推荐 Java
Java中的Collections.shuffle()方法及示例
`Collections.shuffle()` 是 Java 中用于随机打乱列表顺序的方法,基于 Fisher-Yates 算法实现,支持原地修改。可选传入自定义 `Random` 对象以实现结果可重复,适用于抽奖、游戏、随机抽样等场景。
337 0
|
9月前
|
安全 Java 微服务
Java 最新技术和框架实操:涵盖 JDK 21 新特性与 Spring Security 6.x 安全框架搭建
本文系统整理了Java最新技术与主流框架实操内容,涵盖Java 17+新特性(如模式匹配、文本块、记录类)、Spring Boot 3微服务开发、响应式编程(WebFlux)、容器化部署(Docker+K8s)、测试与CI/CD实践,附完整代码示例和学习资源推荐,助你构建现代Java全栈开发能力。
894 1
|
9月前
|
缓存 安全 Java
Java 并发新特性实战教程之核心特性详解与项目实战
本教程深入解析Java 8至Java 19并发编程新特性,涵盖CompletableFuture异步编程、StampedLock读写锁、Flow API响应式流、VarHandle内存访问及结构化并发等核心技术。结合电商订单处理、缓存系统、实时数据流、高性能计数器与用户资料聚合等实战案例,帮助开发者高效构建高并发、低延迟、易维护的Java应用。适合中高级Java开发者提升并发编程能力。
387 0