首页 > 编程语言 >Java 21 正式发布!新特性专栏继续更起来了~

Java 21 正式发布!新特性专栏继续更起来了~

时间:2023-09-24 22:05:38浏览次数:37  
标签:info Java 21 JDK 专栏 data log


Java 21 正式发布!新特性专栏继续更起来了~_Java

就在昨天晚间,Oracle公司宣布Java 21正式发布。该版本是继JDK 17之后最新的长期支持版本(LTS),将获得至少8年的支持!

Java 21 号称具有数千项性能、稳定性和安全性改进。新的 JDK 21 包括对 15 项改进的抢先体验,这些增强功能是在 Oracle CloudWorld 2023 会议上宣布的,包括支持虚拟线程以提高整体吞吐量,以及增加对向量应用编程接口(API)的支持,从而更轻松地构建涉及人工智能 AI 模型的 Java 应用。

相信关注DD的读者知道,去年我开过这样一个坑,后来太监了...

Java 21 正式发布!新特性专栏继续更起来了~_新特性_02

最近,趁着Java 21准备继续连载下去,把之前一大波没更新的特性和经多次完善再这次确定下来的特性再串一遍,欢迎收藏!今天先来学习两个:switch的模式匹配和Record Patterns(不知道怎么翻译好,就不翻了

Java 21 正式发布!新特性专栏继续更起来了~_Java_03


地址:https://www.didispace.com/java-features/

switch的模式匹配

其实在之前的Java 17新特性中,我们介绍过关于JEP 406: switch的模式匹配,但当时还只是关于此内容的首个预览版本。之后在JDK 18、JDK 19、JDK 20中又都进行了更新和完善。如今,在JDK 21中,该特性得到了最终确定!下面,我们就再正式学习一下该功能!

在以往的switch语句中,对于case中的类型匹配限制是很多的。比如下面这个例子中的Map中可能存储了不同类型的对象,我们要判断的时候,就只能依靠if-else来完成。

Map<String, Object> data = new HashMap<>();
data.put("key1", "aaa");
data.put("key2", 111);
if (data.get("key1") instanceof String s) {
  log.info(s);
}

if (data.get("key") instanceof String s) {
  log.info(s);
} else if (data.get("key") instanceof Double s) {
  log.info(s);
} else if (data.get("key") instanceof Integer s) {
  log.info(s);
}

现在开始,这样的类型判断关系,就可以简化为如下的switch代码:

switch (data.get("key1")) {
  case String s  -> log.info(s);
  case Double d  -> log.info(d.toString());
  case Integer i -> log.info(i.toString());
  default        -> log.info("");
}

这个功能还是非常有用的,尤其是存在一些抽象封装的时候,可能存在一些父子、兄弟等关系类的时候,为了判断是什么类型,就不用写很多if来处理了,代码简洁度可以得到进一步的优化。

对于上面的例子,还没有升级到Java 17的用户,可能还涉及一些其他新特性,有需要的可以补充学习一下:

第一个是 Java 16中的instance of增强 ; 第二个是 switch中使用Lambda的增强 。

这里顺手这里给大家推荐下我们自研的Youtube视频语音转换插件(https://youtube-dubbing.com/),一键外语转中文,英语不好的小伙伴也可以轻松的学习油管上的优质教程了,下面是演示视频,可以直观的感受一下:

Record Patterns

记录模式(Record Patterns)第一次发布预览是在JDK 19、随后又在JDK 20中进行了完善。现在,Java 21开始正式推出该特性优化。下面我们通过一个例子来理解这个新特性。

record Point(int x, int y) {}

static void printSum(Object obj) {
    if (obj instanceof Point p) {
        int x = p.x();
        int y = p.y();
        System.out.println(x+y);
    }
}

上述代码中定义了一个名为Point的record类(Java 16中的新特性),如果我们想要获取、操作Point中的x和y的话。就不得不先完成类型判断、类型转换、数据解构。所以,这里为了实现x+y总共需要4行代码。而在Java 21之后,只需要2行代码就能完成:

static void printSum(Object obj) {
    if (obj instanceof Point(int x, int y)) {
        System.out.println(x+y);
    }
}

可以看到,类型判断、类型转换、record值的解构都一气呵成了,所以代码量得到了简化。

好了,今天的分享就到这里,欢迎关注Java新特性专栏:

https://www.didispace.com/java-features/


标签:info,Java,21,JDK,专栏,data,log
From: https://blog.51cto.com/u_14299052/7588959

相关文章

  • 20211314王艺达学习笔记3
    sh编程sh脚本与C程序·C程序必须先编译链接到一个二进制可执行文件,再通过主sh的子进程运行该二进制可执行文件;sh则可直接执行行命令。·sh脚本不需要main函数。编写sh脚本shell的基本语法主要就是如何输入命令运行程序以及如何在程序之间通过shell的一些参数提供便利手段来进......
  • 20211301 学习笔记3
    20211301《Unix/Linux系统编程》学习笔记3学习目标总结一下一门程序设计语言有哪些必备的要素和技能?这些要素和技能在shell脚本中是如果呈现出来的?教材知识总结10.1sh脚本定义:sh脚本是一个包含sh语句的文本文件、命令解释程序sh要执行该语句sh:sh是解释程序,逐行......
  • Java语法学习——运算符
    一、基本的算术运算符、+符号做连接符1.基本的算术运算符   为了掌握基本的算术运算符的使用,我们在IDEA里新建一个package(it.com.operator),然后在这下面新建一个Javaclass(OperatorDemo1):packageit.com.operator;publicclassOperatorDemo1{publicstaticvoid......
  • Java课堂
    importjava.awt.*;importjava.awt.event.*;importjava.util.*;publicclassMain{publicstaticdoublemax(double...values){doublelargest=Double.MIN_VALUE;for(doublev:values)if(v>largest)largest=v;......
  • 20211316郭佳昊 《信息安全系统设计与实现(上)》第三周学习笔记
    一、任务要求[1]知识点归纳以及自己最有收获的内容,选择至少2个知识点利用chatgpt等工具进行苏格拉底挑战,并提交过程截图,提示过程参考下面内容(4分)我在学***X知识点,请你以苏格拉底的方式对我进行提问,一次一个问题核心是要求GPT:请你以苏格拉底的方式对我进行提问然后GPT就会......
  • 21python实现简单的消息队列
      frommultiprocessingimportQueue'''q=Queue(num)若括号中没有指定最大可接收的消息数量,或数量为负值,那么就代表可接收的消息数量没有上限(直到内存的尽头)。函数也是队列的初始化。Queue.qsize()返回当前队列包含的消息数量。Queue.empty()如果队列为空,返回T......
  • 无涯教程-JavaScript - RANK.AVG函数
    描述RANK.AVG函数在提供的值数组中返回给定值的统计等级。如果列表中有重复值,则返回平均排名。语法RANK.AVG(number,ref,[order])争论Argument描述Required/OptionalNumberThenumberwhoserankyouwanttofind.RequiredRefAnarrayof,orareferenceto,a......
  • 无法在web.xml或使用此应用程序部署的jar文件中解析绝对uri:[http://java.sun.com/jsp/
    今天解决了一个很早之前的问题!!!无法在web.xml或使用此应用程序部署的jar文件中解析绝对uri:[http://java.sun.com/jsp/jstl/core]之前一直以为是jar包不匹配,但是改了jar包之后连uri都分辨不出来了后来在网上查到是tomcat的问题,将tomcat的conf目录下的catalina.properties的tomc......
  • JavaScript函数的使用
    有关函数概念:匿名函数指的是没有函数名称的函数。作用:可以有效的避免全局变量的污染以及函数名的冲突问题。说明:既是函数表达式的另一种表示形式,又可通过函数声明的方式实现调用。函数语法varfun4=function(){console.log("我是匿名函数中封装的一段代码");......
  • 一致性哈希算法实现(java)
    代码基本实现未完待续........... publicstaticvoidmain(String[]args){​TreeMap<Integer,String>hashNodes=newTreeMap<>();hashNodes.put(1,"1.1.1.1");hashNodes.put(4,"1.1.1.2");hashNodes.put......