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

相关文章

Mac系统下卸载JAVA和JDK的步骤

《Mac系统下卸载JAVA和JDK的步骤》JDK是Java语言的软件开发工具包,它提供了开发和运行Java应用程序所需的工具、库和资源,:本文主要介绍Mac系统下卸载JAVA和JDK的相关资料,需... 目录1. 卸载系统自带的 Java 版本检查当前 Java 版本通过命令卸载系统 Java2. 卸载自定

gitlab安装及邮箱配置和常用使用方式

《gitlab安装及邮箱配置和常用使用方式》:本文主要介绍gitlab安装及邮箱配置和常用使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1.安装GitLab2.配置GitLab邮件服务3.GitLab的账号注册邮箱验证及其分组4.gitlab分支和标签的

MySQL MCP 服务器安装配置最佳实践

《MySQLMCP服务器安装配置最佳实践》本文介绍MySQLMCP服务器的安装配置方法,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下... 目录mysql MCP 服务器安装配置指南简介功能特点安装方法数据库配置使用MCP Inspector进行调试开发指

在Windows上使用qemu安装ubuntu24.04服务器的详细指南

《在Windows上使用qemu安装ubuntu24.04服务器的详细指南》本文介绍了在Windows上使用QEMU安装Ubuntu24.04的全流程:安装QEMU、准备ISO镜像、创建虚拟磁盘、配置... 目录1. 安装QEMU环境2. 准备Ubuntu 24.04镜像3. 启动QEMU安装Ubuntu4

Python UV安装、升级、卸载详细步骤记录

《PythonUV安装、升级、卸载详细步骤记录》:本文主要介绍PythonUV安装、升级、卸载的详细步骤,uv是Astral推出的下一代Python包与项目管理器,主打单一可执行文件、极致性能... 目录安装检查升级设置自动补全卸载UV 命令总结 官方文档详见:https://docs.astral.sh/

Python实例题之pygame开发打飞机游戏实例代码

《Python实例题之pygame开发打飞机游戏实例代码》对于python的学习者,能够写出一个飞机大战的程序代码,是不是感觉到非常的开心,:本文主要介绍Python实例题之pygame开发打飞机... 目录题目pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本代码解释初始化部

使用jenv工具管理多个JDK版本的方法步骤

《使用jenv工具管理多个JDK版本的方法步骤》jenv是一个开源的Java环境管理工具,旨在帮助开发者在同一台机器上轻松管理和切换多个Java版本,:本文主要介绍使用jenv工具管理多个JD... 目录一、jenv到底是干啥的?二、jenv的核心功能(一)管理多个Java版本(二)支持插件扩展(三)环境隔

Nexus安装和启动的实现教程

《Nexus安装和启动的实现教程》:本文主要介绍Nexus安装和启动的实现教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、Nexus下载二、Nexus安装和启动三、关闭Nexus总结一、Nexus下载官方下载链接:DownloadWindows系统根

Java SWT库详解与安装指南(最新推荐)

《JavaSWT库详解与安装指南(最新推荐)》:本文主要介绍JavaSWT库详解与安装指南,在本章中,我们介绍了如何下载、安装SWTJAR包,并详述了在Eclipse以及命令行环境中配置Java... 目录1. Java SWT类库概述2. SWT与AWT和Swing的区别2.1 历史背景与设计理念2.1.

CnPlugin是PL/SQL Developer工具插件使用教程

《CnPlugin是PL/SQLDeveloper工具插件使用教程》:本文主要介绍CnPlugin是PL/SQLDeveloper工具插件使用教程,具有很好的参考价值,希望对大家有所帮助,如有错... 目录PL/SQL Developer工具插件使用安装拷贝文件配置总结PL/SQL Developer工具插