JDK21实用新特性

字符串模板

允许在字符串中使用占位符来动态替换变量的值。这提供了一种更简洁、更直观的方式来构建字符串,避免了传统的字符串拼接或格式化方法的复杂性。
基本使用说明:

String name = "Joan";
String info = STR."My name is \{name}";
assert info.equals("My name is Joan");   // true

同时支持多行模板和表达式

String sore = "20";
var json = STR."""
{
  "user": "\{
    // We only want to use the firstname
    this.user.firstname()
  }",
  "sore : \{sore}
}
""";

Switch 增强

switch语句通过模式匹配功能得到了显著增强。以下是一个具体的示例:

Object value = "Hello";  
  
switch (value) {  
    case String s -> System.out.println(s.length()); // 匹配String类型,并获取长度  
    case Integer i -> System.out.println(i * 2); // 匹配Integer类型,并乘以2  
    case null -> System.out.println("Value is null"); // 匹配null值  
    default -> System.out.println("Unknown type"); // 未知类型  
}

这种模式匹配的方式比传统的switch语句更加灵活和强大,因为它不再局限于简单的整数或枚举类型的匹配,而是可以匹配任何类型的对象,并根据对象的类型执行相应的操作。

记录模式

记录模式是一种新的语言特性,允许我们定义简洁且不可变的数据模型。它通过自动创建构造函数、getter 和 equals/hashCode 等方法来简化数据对象的定义。

public record Person(String name, int age) {}
Person person = new Person("Alice",25);
System.out.println(person.name());
System.out.println(person.age());

虚拟线程

历史版本中,JDK 中的每个 java.lang.Thread 实例都是一个平台线程。平台线程在底层操作系统线程上运行 Java 代码,并在代码的整个生命周期内捕获操作系统线程。平台线程的数量受限于操作系统线程的数量。

在 JDK 21 中引入的虚拟线程被设计成一种轻量级的线程模型,它可以更高效地执行异步代码,避免了传统线程模型中线程的创建和销毁开销,提供更高的并发性和更低的资源消耗。

//创建一个新的并且已启动的虚拟线程
Thread thread = Thread.startVirtualThread(runnable);
//创建executor
ExecutorService executor = Executors.newVirtualThreadPerTaskExecutor();
//通过executor提交任务,采用虚拟线程执行
executor.submit(runnable);
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容