首页 > 其他分享 >9月12日总结

9月12日总结

时间:2023-09-21 13:01:23浏览次数:59  
标签:总结 12 obj Point int height record WindowFrame

博客园
首页
新随笔
联系
订阅
管理

随笔 - 283 文章 - 0 评论 - 234 阅读 - 53万
Java 21 新特性: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值的结构都一气呵成了,所以代码量得到了简化。
嵌套record的解构

假设有下面一组嵌套的record结构(WindowFrame中包含了Point和Size):

record Size(int width, int height) { }
record Point(int x, int y) { }
record WindowFrame(Point origin, Size size) { }

这个时候,如果想要访问WindowFrame中Size的height,根据之前案例的理解,我们可以这样写:

if (obj instanceof WindowFrame wf) {
if (wf.size() != null) {
System.out.println("Height: " + wf.size().height());
}
}

好像也没有很简单,但实际上还有更简单的写法,因为record的解构是可以嵌套的,直接这样一步完成即可:

if (obj instanceof WindowFrame(Point origin, Size(int width, int height))) {
System.out.println("Height: " + height);

标签:总结,12,obj,Point,int,height,record,WindowFrame
From: https://www.cnblogs.com/lmyy/p/17719705.html

相关文章

  • 9月14日总结
    记一次.NET某餐饮小程序内存暴涨分析一:背景讲故事前些天有位朋友找到我,说他的程序内存异常高,用vs诊断工具加载时间又太久,让我帮忙看一下到底咋回事,截图如下:确实,如果dump文件超过10G之后,市面上那些可视化工具分析起来会让你崩溃的,除了时间久之外这些工具大多也不是用......
  • 9月13日总结
    DenpendcyInjection8.0新功能——KeyedService分类:.NET标签:KeyedService,DenpendcyInjection,ASP.NETCOREDenpendcyInjection8.0新功能——KeyedService本文只介绍.NETDenpendcyInjection8.0新功能——KeyedService,假定读者已熟练使用之前版本的功能。注册......
  • 9月15日总结
    责任链模式作为常用的设计模式而被大家熟知和使用。本文介绍责任链的常见实现方式,并结合开源框架如Dubbo、Sentinel等进行延伸探讨。一、责任链介绍在GoF的《设计模式》一书中对责任链模定义的:将请求的发送和接收解耦,让多个接收对象都有机会处理这个请求。将这些接收对象串成一......
  • 9月11日总结
    慢SQL原因分析之索引失效现象最近收到一个慢sql工单,慢sql大概是这样:“selectxxxfromtabelwheretype=1”。咦,type字段明明有索引啊,为啥是慢sql呢?原因通过执行explain,发现实际上数据库执行了全表扫描,从而被系统判定为慢sql。这时有一定开发经验的同事会说:“字段区分度......
  • 每日总结01
    刚开学的时候配置了虚拟机中的hadoop、zookeeper、hbase。在当时还可以使用,但是就在昨天居然不能用了,hadoop、zookeeper、hbase都可以正常使用,但是就是无法连接hbase,于是开始重新配置环境、重新配置虚拟机中的hadoop、zookeeper、hbase。具体出现什么问题不明确,怀疑是强制开关机导......
  • 线程间共享数据-各种锁(总结)
    std::mutex#include<mutex>#include<list>std::mutexsome_mutex;std::list<int>mylist;voidfunc(intvalue){some_mutex.lock();//加锁mylist.push_back(value);some_mutex.unlock();//解锁}std::lock_guard......
  • 124. 二叉树中的最大路径和
    二叉树中的路径被定义为一条节点序列,序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中至多出现一次。该路径至少包含一个节点,且不一定经过根节点。路径和是路径中各节点值的总和。给你一个二叉树的根节点root,返回其最大路径和。示例1:输入:root=......
  • 数组变异方法和非变异方法的总结
    区别:1.操作数组的方法中,分为变异方法和非变异方法。2.其中,变异方法意味着会改变原数组,而非变异方法则只会返回一个新数组,不会修改原始数组数组变异方法:push()//数组尾部追加一个元素pop()//数组尾部弹出一个元素shift()//数组头部弹出一个元素unshift()//数组头部插入一个......
  • Windows Server 2012 防火墙如何添加端口例外的方法
    WindowsServer2012防火墙如何添加端口例外的方法https://www.cnblogs.com/seasonzone/p/7099726.html常用端口https://www.cnblogs.com/yzgblogs/p/14511256.html......
  • Redis漏洞总结--未授权--沙箱绕过--(CNVD-2015-07557)&&(CNVD-2019-21763)&&(CVE-2022
    Redis未授权--沙箱绕过--(CNVD-2015-07557)&&(CNVD-2019-21763)&&(CVE-2022-0543)环境复现采用Vulfocus靶场进行环境复现,官网docker搭建有问题,具体搭建教程参考vulfocus不能同步的解决方法/vulfocus同步失败CNVD-2015-07557未授权访问影响版本Redis<=5.0.5漏洞探测使用端......