jdk安装教程_JDK 14 / JEP 305模式匹配“ Smart Casts”实例

2023-11-01 15:50

本文主要是介绍jdk安装教程_JDK 14 / JEP 305模式匹配“ Smart Casts”实例,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

jdk安装教程

jdk安装教程

我通常将Java代码中instanceof运算符的存在视为“红色标志”,这意味着在某些情况下使用instanceof不一定是错误的,但是使用它有时表示可以以更简洁的方式解决设计问题,如所述本文结尾处引用的一些资源中的内容(包括有关Java以外语言的类似类型检查功能的资源)。

尽管我已经看到instanceof不需要使用多次,但我遇到了更多情况,要避免instanceof并不容易。 当使用遗留代码库以及某些库和框架时,尤其如此,在这些库和框架中,我无法重构类之间的关系以支持接口,方法重写以及其他可用于消除对instanceof

与使用的一个非常普通的技术instanceof是立即强制转换为类型在有条件使用检查instanceof 。 JEP 305 [“针对instanceof(预览)的模式匹配”]提供了这种常见模式的示例,在这里我略微修改了该示例:

 if (object instanceof String){final String string = (String) object;// Do something with the 'string' variable typed as String}

本杰·韦伯(Benji Weber )发布了有关使用反射和使用lambda表达式来实现类似于Kotlin的“智能转换实例”的文章。 幸运的是, JDK 14和JEP 305为这种方法带来了内置的语言支持(尽管处于预览状态)。

JDK 14引入了预览功能,该功能允许在条件内完全实现条件和instanceof 。 接下来显示对以上代码示例的影响:

 if (object instanceof String string){// Do something with the 'string' variable typed as String}

此预览功能在JDK 14 Early Access Builds中可用,而我在本文中的示例中使用的是JDK 14 Early Access Build 34

在JDK 14 JEP 305预览功能是一个小的精密,其优点是在漫长的更加明显if - then - else的条件语句。 接下来的两个代码清单比较了调用instanceof的“旧方法”和显式转换为使用instanceof模式匹配的“新预览方法”。

传统instanceof结合显式cast

 static void makeAnimalNoises( final Object animal){if (animal Dog) (animal instanceof Dog){final Dog dog = (Dog) animal;out.println(dog.bark());}else if (animal Cat) (animal instanceof Cat){final Cat cat = (Cat) animal;out.println(cat.meow());}else if (animal Duck) (animal instanceof Duck){final Duck duck = (Duck) animal;out.println(duck.quack());}else if (animal Horse) (animal instanceof Horse){final Horse horse = (Horse) animal;out.println(horse.neigh());}else if (animal Cow) (animal instanceof Cow){final Cow cow = (Cow) animal;out.println(cow.moo());}else if (animal instanceof Lion){final Lion lion = (Lion) animal;out.println(lion.roar());}else{out.println( "ERROR: Unexpected animal: " + animal);}}

JDK 14 / JEP 305预览功能

 static void makeAnimalNoises( final Object animal){if (animal Dog dog) (animal instanceof Dog dog){out.println(dog.bark());}else if (animal Cat cat) (animal instanceof Cat cat){out.println(cat.meow());}else if (animal Duck duck) (animal instanceof Duck duck){out.println(duck.quack());}else if (animal instanceof Horse horse){out.println(horse.neigh());}else if (animal Cow cow) (animal instanceof Cow cow){out.println(cow.moo());}else if (animal Lion lion) (animal instanceof Lion lion){out.println(lion.roar());}else{out.println( "ERROR: Unexpected animal: " + animal);}}

完整的代码在GitHub上,并且可以使用旧方法和新预览方法之间的区别。

由于instanceof模式匹配是预览功能,因此使用此功能的代码必须使用javac标志--enable-preview-source 14进行编译。 它必须使用java标志--enable-preview

结论

有关如何实现此功能的更多详细信息,请参见“ RFR:JDK-8237528:instanceof的模式匹配的低效率编译”一文。 instanceof模式匹配支持是Amber向Java减少样板代码提供的又一步。

有关使用instanceof问题的资源

  • Java'instanceOf':为什么以及如何在代码中避免使用它
  • 您真的需要instanceof吗?
  • 在Java中使用instanceof是否考虑了不良做法?
  • 使用Instanceof主要是代码异味
  • 有条件的Instanceof:代码气味
  • 当心instanceof运算符
  • “ instanceof”有多邪恶?
  • 类型检查是代码异味

翻译自: https://www.javacodegeeks.com/2020/02/jdk-14-jep-305-instanceof-pattern-matching-smart-casts.html

jdk安装教程

这篇关于jdk安装教程_JDK 14 / JEP 305模式匹配“ Smart Casts”实例的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/324085

相关文章

python安装完成后可以进行的后续步骤和注意事项小结

《python安装完成后可以进行的后续步骤和注意事项小结》本文详细介绍了安装Python3后的后续步骤,包括验证安装、配置环境、安装包、创建和运行脚本,以及使用虚拟环境,还强调了注意事项,如系统更新、... 目录验证安装配置环境(可选)安装python包创建和运行Python脚本虚拟环境(可选)注意事项安装

gradle安装和环境配置全过程

《gradle安装和环境配置全过程》本文介绍了如何安装和配置Gradle环境,包括下载Gradle、配置环境变量、测试Gradle以及在IntelliJIDEA中配置Gradle... 目录gradle安装和环境配置1 下载GRADLE2 环境变量配置3 测试gradle4 设置gradle初始化文件5 i

Jsoncpp的安装与使用方式

《Jsoncpp的安装与使用方式》JsonCpp是一个用于解析和生成JSON数据的C++库,它支持解析JSON文件或字符串到C++对象,以及将C++对象序列化回JSON格式,安装JsonCpp可以通过... 目录安装jsoncppJsoncpp的使用Value类构造函数检测保存的数据类型提取数据对json数

mac安装redis全过程

《mac安装redis全过程》文章内容主要介绍了如何从官网下载指定版本的Redis,以及如何在自定义目录下安装和启动Redis,还提到了如何修改Redis的密码和配置文件,以及使用RedisInsig... 目录MAC安装Redis安装启动redis 配置redis 常用命令总结mac安装redis官网下

使用Nginx来共享文件的详细教程

《使用Nginx来共享文件的详细教程》有时我们想共享电脑上的某些文件,一个比较方便的做法是,开一个HTTP服务,指向文件所在的目录,这次我们用nginx来实现这个需求,本文将通过代码示例一步步教你使用... 在本教程中,我们将向您展示如何使用开源 Web 服务器 Nginx 设置文件共享服务器步骤 0 —

Golang使用minio替代文件系统的实战教程

《Golang使用minio替代文件系统的实战教程》本文讨论项目开发中直接文件系统的限制或不足,接着介绍Minio对象存储的优势,同时给出Golang的实际示例代码,包括初始化客户端、读取minio对... 目录文件系统 vs Minio文件系统不足:对象存储:miniogolang连接Minio配置Min

Oracle Expdp按条件导出指定表数据的方法实例

《OracleExpdp按条件导出指定表数据的方法实例》:本文主要介绍Oracle的expdp数据泵方式导出特定机构和时间范围的数据,并通过parfile文件进行条件限制和配置,文中通过代码介绍... 目录1.场景描述 2.方案分析3.实验验证 3.1 parfile文件3.2 expdp命令导出4.总结

手把手教你idea中创建一个javaweb(webapp)项目详细图文教程

《手把手教你idea中创建一个javaweb(webapp)项目详细图文教程》:本文主要介绍如何使用IntelliJIDEA创建一个Maven项目,并配置Tomcat服务器进行运行,过程包括创建... 1.启动idea2.创建项目模板点击项目-新建项目-选择maven,显示如下页面输入项目名称,选择

如何安装 Ubuntu 24.04 LTS 桌面版或服务器? Ubuntu安装指南

《如何安装Ubuntu24.04LTS桌面版或服务器?Ubuntu安装指南》对于我们程序员来说,有一个好用的操作系统、好的编程环境也是很重要,如何安装Ubuntu24.04LTS桌面... Ubuntu 24.04 LTS,代号 Noble NumBAT,于 2024 年 4 月 25 日正式发布,引入了众

如何安装HWE内核? Ubuntu安装hwe内核解决硬件太新的问题

《如何安装HWE内核?Ubuntu安装hwe内核解决硬件太新的问题》今天的主角就是hwe内核(hardwareenablementkernel),一般安装的Ubuntu都是初始内核,不能很好地支... 对于追求系统稳定性,又想充分利用最新硬件特性的 Ubuntu 用户来说,HWEXBQgUbdlna(Har