沧州三亚菏泽经济预测自然
投稿投诉
自然科学
知识物理
化学生物
地理解释
预测理解
本质社会
人类现象
行为研究
经济政治
心理结构
关系指导
人文遗产
菏泽德阳
山西湖州
宝鸡上海
茂名内江
三亚信阳
长春北海
西安安徽
黄石烟台
沧州湛江
肇庆鹤壁
六安韶关
成都钦州

详解Java19中的记录类型的模式匹配

3月23日 桃花醉投稿
  Java19将于2022年9月20日发布,目前已经有发布候选(ReleaseCandidate,RC)版本可供下载。本文对Java19中的记录类型的模式匹配(RecordPatterns)进行介绍。在阅读本文之前,你可以参考另外三篇相关的文章:详解Java17中的记录类型(Record)详解Java17中的模式匹配(PatternMatching)详解Java19中switch的模式匹配
  记录类型的模式是Java19中可以使用的一种新的匹配模式。记录类型的模式不能单独使用,而是要与instanceof或switch模式匹配一同使用。记录类型的模式主要用于简化下面的一类使用场景。
  记录类型的模式是预览功能,需要通过javac和java命令的参数enablepreview来启用。
  以记录类型GeoLocation为例来进行说明,要执行的操作仍然是进行格式化。publicrecordGeoLocation(doublelng,doublelat){}
  期望的GeoLocation的格式化输出结果是类似〔lng,lat〕。传统的写法如下面的代码所示,先进行类型判断,然后再强制类型转换,最后使用GeoLocation提供的访问方法(lng()和lat())来获取值。if(objinstanceofGeoLocation){GeoLocationgeoLocation(GeoLocation)returnString。format(〔。6f,。6f〕,geoLocation。lng(),geoLocation。lat());}
  这种做法无疑是很繁琐的。记录类型的模式可以简化这种类型的操作,允许直接提取记录类型中的组件的值。
  结合在详解Java17中的模式匹配(PatternMatching)一文中提到的模式的组成部分,记录类型的模式由下面两个部分组成:记录类型的模式的predicate与instanceof模式是一样的,都是进行类型匹配。记录类型的模式的模式变量的集合,包含了要提取的记录类型的组件,以及记录对象本身。
  下面的代码展示了记录类型的模式在switch语句中的用法。GeoLocation(doublelng,doublelat)表示的是记录类型的模式,其中GeoLocation是需要匹配的类型,lng和lat是两个模式变量,表示从记录类型中提取的值。这两个模式变量可以直接使用。publicclassObjectFormatter{publicStringformat(Objectobj){returnswitch(obj){caseGeoLocation(doublelng,doublelat)String。format(〔。6f,。6f〕,lng,lat);casedefaultobj。toString();};}}
  这里有几点需要注意:在声明模式变量时,并不需要显式地指定类型,用var也是可以的,如GeoLocation(varlng,varlat)。具体的类型由编译器自动推断。模式变量的名称不需要与记录类型的组件名称保持一致,如GeoLocation(varx,vary)也是可以的。这些变量是按照记录类型的组件列表中的位置来匹配的。
  由于记录类型是可以嵌套的,在匹配时也同样可以进行嵌套,从而很方便地从复杂的对象层次结构中提取数据。
  下面的代码使用了详解Java17中的记录类型(Record)一文中介绍的Order记录类型。记录类型的模式匹配时,直接访问了嵌套的Address记录的addressLine组件。publicstaticvoiddisplay(Orderorder){if(orderinstanceofOrder(StringorderId,StringuserId,LocalDateTimecreatedAt,ListOrder。LineItemlineItems,Order。Address(StringaddressLine,StringcityId,StringprovinceId,StringzipCode))){System。out。println(addressLine);}}
  除了记录类型中的组件之外,记录对象本身也可以作为模式变量。在下面的代码中,GeoLocation(doublelng,doublelat)之后的g同样是模式变量,表示当前的GeoLocation对象。if(geoLocationinstanceofGeoLocation(doublelng,doublelat)g){System。out。println(g);System。out。println(lng,lat);}
  使用泛型的记录类型也是可以的。在进行匹配时,必须使用带实际类型的泛型形式。比如,下面代码中的记录类型Box。recordBoxT(Tt){}
  在下面的代码中,匹配的模式必须是类似Box这样的。staticvoidtest(BoxObjectbox){if(boxinstanceofBoxObject(Strings)){System。out。println(字符串:s);}}
投诉 评论 转载

梦华录开始虐心,池衙内爱上赵盼儿,顾千帆成为前夫哥顾千帆和赵盼儿,这对苦命鸳鸯可真是不容易啊!两人初识在钱塘,相互救赎了几次,互生爱意。那时,赵盼儿刚被欧阳旭一封书信给抛弃了。赵盼儿对前夫哥欧阳旭还不甘心。顾千帆哪怕心动……南方四省现特大暴雨!6日19日下午,从风云四号高清可见光卫星云图上看,今天我国南方地区的降雨带似乎略有北抬,在大范围的雨带中,浓密白亮的降雨云团在江汉、湘西、粤北和赣东北等地出现,这是雨带中充沛的……天量高价值数据被窃取损失难以估量,低估的西北工大网络攻击国家计算机病毒应急处理中心发布西北工业大学遭美国NSA,也就是美国国家安全局,网络攻击事件调查报告。报告主要是关于2022年6月西北工业大学遭遇的网络攻击事件,背后主谋为美国国……啥关键原料,传特斯拉砸50亿美元向印尼购买?镍金属价格受到俄乌战争影响而暴涨,导致电动车成本持续攀升,与LFP磷酸铁锂电池相比,具有镍阴极的电池能量密度与功率更高,这也是尽管镍价格高涨,但特斯拉目前仍未放弃此选择的原因之……1K荣耀X30这篇文章肯定会得罪很多人但高价低配确实让人不太得劲为了保护韭菜们冲了兄弟们荣耀X30咱们先看看具体参数屏幕部分参数屏幕尺寸:6。81英……我国痛风患者超千万,祸根被揪出这些食物才是嘌呤大户文章最后,九叔给大家总结一下:1、高尿酸的危害尿酸高会引发痛风,还会损伤肾脏、心血管、代谢系统,增加男性患勃起功能障碍的几率。2、3个睡前症状,是尿酸报警的信……一念天堂,一念地狱不慌不忙中前行3小时前有时候人真是一念天堂,一念地狱。万恶淫为首啊!这几天,四川乐山市沐川县民警持械伤人、杀人案,轰动了全国。嫌疑人杀人后弃车逃逸,7月30号……佩洛西窜访台湾深层分析(真正的干货)(二)没想到昨天的这这篇小作文收获了40多个粉丝,窃喜ing。言归正传,昨天讲了美国不会真正支持台湾独立,那今天讲台湾自己为什么也不希望独立。这就首先要讲到台湾的政体,也……大唐西域记之僧伽罗国(斯里兰卡)僧伽罗国也称狮子国,今为斯里兰卡,该国土壤为红铜色,所以印度称之为铜色国。僧伽罗国为南印度洋岛国,西北隔保克海峡与印度半岛相望。2500年前,来自印度半岛的雅利安人移民锡兰岛建……只有我没买?iPhone14Pro系列卖疯了中秋快乐,家人们!我是昨晚下单iPhone14ProMax,但是因为支付软件bug,提醒我:余额不足而被迫取消订单的果子前天晚上,果子熬夜看完了整场苹果发布会直播,……详解Java19中的记录类型的模式匹配Java19将于2022年9月20日发布,目前已经有发布候选(ReleaseCandidate,RC)版本可供下载。本文对Java19中的记录类型的模式匹配(RecordPat……14年,湖南两名男子冒充大官强闯监狱提人,证件一出引起哄堂大2014年10月,湖南省岳阳市的某监狱来了两名大官,他们姿态嚣张,指名道姓要监狱长过来相见。监狱长赶到后才知,这两位联合国大官是来这里提犯人的。当看到他们的证件后,……
三国杀怎么克制秦宓揭秘三国杀秦宓怎么打甘肃省第一批拟选派科技专员开始公示和孩子一起幸福读书的十个办法埃芬博格纳帅如此大轮换会让球员不满,如何解释是他的最大挑战周年结婚纪念日语录如何对中学生进行人格教育微商的引流推广怎么做策问造句用策问造句大全唐山烧烤店打人案今天终于开庭了有你真的很幸福中考成绩580分,却无法去重点高中读书,指标到校惹争议鼠年姓姚男孩名字有哪些姓姚男孩取什么名字好吃错水果可致肾病加重,最全水果挑选技巧我和爸爸比童年农村房屋买卖合同无效的法律后果是什么网站改版对流量的影响:影响TechCrunch流量的几大因素我心爱的文具盒红楼梦第一百零七回原文:散余资贾母明大义复世职政老沐天恩胃镜要做多久(不用胃镜可以查胃吗)李现客串亲爱的,挚爱的演韩商言,杨紫也将回归,婚后戏期待为什么50岁后穿衣要多露脚踝?看日本主妇就知道,不仅显瘦还洋生在一瞬间中国邮政储蓄银行发布重要公告,今日正式启用01,输球又输人!中国男足创耻辱,1年4场不胜,亚洲杯出线没

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找