切换表达式到Java吗?

已创建一个标题为“ Java语言的开关表达式”的JEP草案 。 当前的“摘要”状态为:“扩展switch语句,以便可以将其用作语句或表达式,并改善switch处理null的方式。 这些将简化日常编码,并为在switch使用模式匹配做好准备。” 除了启用令人兴奋的模式匹配JEP(305)之外,所提议的Java switch表达式本身还具有一些有希望的特征。

Java教程将Java 语句定义为“大致等同于自然语言中的句子”的“执行的完整单元”。 它将Java 表达式定义为“由变量,运算符和方法调用组成的构造,其结果为单个值。” 当前的Java switch是一条语句 ,但是JEP草案建议将switch也作为表达式来支持。

JEP的Switch Expression草案在其“动机”部分指出:“当我们准备增强Java语言以支持模式匹配时 ,现有的switch语句的一些不规则性(长期以来一直困扰着用户)成为了障碍。” JEP草案具有很高的可读性,并包含有趣的讨论点和说明性的代码示例,这些示例说明了当前如何在其他Java构造函数中经常使用Java switch语句来有效地充当表达式。 JEP草案显示了将switch扩展为用作表达式的提议,以及作为语句得到支持的提议,将如何提高代码的可读性和可维护性。

Java表达式需要“求值为单个值”。 当前提出的switch表达式将允许break关键字充当Java方法中的return 。 可以在break关键字之后指定一个值,并且该值将从switch表达式中“返回”。

因为Java 表达式 “求值为单个值”,所以必须使用用作表达式的Java switch来提供默认值。 JEP草案中涵盖的一个有趣的转折是枚举。 JEP草案指出:“……对于涵盖所有已知情况的枚举switch表达式(最终,通过密封类型的switch表达式),编译器可以插入默认子句,指示枚举定义在两次编译之间已更改时间和运行时间。 (这是开发人员今天手动执行的操作,但是与手工编写的相比,让编译器插入它既不那么具有侵入性,又可能具有更具描述性的错误消息。)“我发现这特别有趣,因为我已经看到很多情况了在这种情况下,开发人员没有为枚举上的switch编写“默认值”,因为当时所有的枚举值都被case s覆盖,或者编写了非常通用的错误消息。 实际上,碰到后者的多个示例终于使我写了博客文章“ Log Unexpected Switch Options” 。

JEP草案还涵盖了一些建议的增强功能,这些功能将使当前的switch语句和新的switch表达式都受益。 其中之一就是能够指示如何处理传递给switch语句的null引用类型。 例如,今天,如果将null String传递给switch语句,则会引发NullPointerException 。 通过此建议,开发人员可以指定case null子句。 当前的提案将处理任何未明确处理的null因为今天在switch会处理null (通过抛出NullPointerException )。

针对当前switch语句和拟议的switch表达式提出的第二个有益特征是允许单个case子句支持多个以逗号分隔的潜在匹配值。 可以使用单个case而不是使用共享单个break三个case子句指定适用于相同行为的三个值。

“切换表达式草稿”仍然是一个草稿,甚至没有分配编号,因此很容易受到潜在更改的影响。 确实,该建议已在邮件列表中进行了讨论,并进行了相当多的修改,例如“ Switch expressions-某些修订版” 。 我发现邮件列表中有一条消息“ 切换float / double / long ”特别有趣。 这个有趣的消息包含全部或技术和历史细节,包括为何今天的switch语句不能long支持的背景,以及“居民浮点专家” Joe Darcy提供的有关浮点比较的有趣分析。

David Goldberg在1991年发表的文章“ 每位计算机科学家都应了解的浮点算法 ”是了解浮点算术和表示法复杂性的著名资源。 达西(Darcy)对这些问题和IEEE 754浮点数提供了一些有趣的见解。 他写道:“为了解决对浮点数的一些常见误解,尽管通常建议*不要*比较浮点数是否相等,但是进行此类比较的定义非常明确,但可能并不能满足您的要求。” 达西处理NaN ,正零和负零以及正无穷大和负无穷大的处理。 一个有趣的结论是,可以实现允许switch浮点数字类型float来真正打开Float.floatToIntBits(float)提供的值 。

如果将Java进行扩展,那么看起来可能会比Java的switch快一些激动人心的时刻,以便除了当前用作语句之外,还可以将其用作表达式。 这是一个可以导致代码更干净,出错空间更少的开发。

翻译自: https://www.javacodegeeks.com/2017/12/switch-expressions-coming-java.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/348826.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WildFly Kubernetes exec探针

活动和就绪探针会告诉Kubernetes吊舱是否正在运行并准备进行一些工作。 企业应用程序可以通过HTTP探测应用程序的状态。 如果没有暴露HTTP端点,Kubernetes也可以通过执行命令进行探测。 WildFly附带了有用的jboss-cli.sh 。 此CLI检索有关服务器和部署状态的信息&a…

FPGA硬件学习基础知识点总结(1)

FPGA硬件学习基础知识点总结(1)锁存器与触发器 总结一下数电,FPGA的一些基础知识,涉及到硬件电路的设计。主要是记录自己的学习过程。 锁存器与触发器 锁存器(latch):锁存器是电平触发的存储单…

ejb java_EJB继承与Java继承不同

ejb java尽管EJB继承有时使用Java继承,但事实并非总是如此。 就像您在我以前的文章中可以读到的那样 ,EJB不必实现任何接口即可公开业务接口。 反之亦然-仅仅是因为EJB实现了某个接口或扩展了其他EJB,并不意味着它公开了全部或任何视图。 假…

UART原理

UART原理 通用异步收发传输器(Universal Asynchronous Receiver / Transmitter),通常称作UART,是一种异步收发传输器,是电脑硬件的一部分。将资料由串行通信与并行通信间作传输转换,作为并行输入成为串行输出的芯片&am…

Java 9:流API的增强

Java 9向Stream接口添加了4种新方法: 1. dropWhile dropWhile方法类似于skip方法,但使用Predicate而不是固定的整数值。 当Predicate为true时,它将从输入流中删除元素。 然后将所有剩余的元素传递到输出流。 例如: IntStream.ra…

AttributeError: module 'tensorflow' has no attribute 'placeholder'等一系列tensorflow版本导致的问题

新人tensorflow2.1版本导致程序我无法运行最简单的办法 法1 tensorflow.compat.v1 import tensorflow.compat..v1 as tf tf.disable_v2_behavior() 亲测不好用 法2 卸载2.1,安装老版本 在Terminal界面输入 pip uninstall tensorflow接着输入Y确定卸载。 安装t…

正则表达式 guava_带有正则表达式模式的Google Guava Cache

正则表达式 guava最近我看到了一个关于Google Guava的不错的介绍 ,我们在我们的项目中得出结论,使用它的缓存功能真的很有趣。 让我们看一下regexp Pattern类及其编译功能 。 在代码中我们经常可以看到,每次使用正则表达式时,程序…

word中一直提示校对错误,如何关闭当前文档校对功能

关闭当前文档校对功能 文件>选项>校对>例外项,选中两个,如图 对比效果:

微信小程序开发学习记录01

微信小程序结构 根目录 app.js:小程序逻辑文件(必须) app.json:小程序配置文件(必须) app.wxss:全局公共样式文件(非必须) pages 组成小程序的多个页面&#xff0c…

Java Optionals获得更具表现力的代码

我们中任何人使用允许空引用的语言进行编程时,都会遇到尝试取消引用一个引用时发生的情况。 无论是导致segfault还是NullPointerException,它始终是一个错误。 托尼霍尔将其描述为他十亿美元的错误 。 当函数向客户端的开发人员未预料到的客户端返回空引…

Atom使用方法(快捷键,插件,汉化)

Atom文本编辑软件 使用方法 常用快捷键 Ctrl Shift M :打开markdown调试窗口 Crtl m:相应括号之间,html tag之间等跳转 Crtl Alt B: 格式化代码(需要安装atom-beautify) Crtl :调起CLI…

将测微仪与Spring Boot 2一起使用

这是快速入门,介绍了如何使用出色的Micrometer库来检测基于Spring Boot 2的应用程序并在Prometheus中记录指标 介绍 Micrometer在各种监视工具提供的客户端库上提供了基于Java的外观。 以Prometheus为例,如果我要将Java应用程序与Prometheus集成&#…

学习笔记整理

毕设学习笔记整理说明Python和Pycharm使用方面因网络问题导致pycharm安装第三方库失败的解决办法将python程序打包为exe程序pyinstallerpy2exepycharm取消缩进Python函数方面python中 if __name__ __main__: 的作用与意义cv2.resize的用法只读取图像的单通道数值最值索引图像增…

与Maven的集成测试

用Maven实施单元测试是很普通的事情,我们大多数人都熟悉项目结构以及单元测试所在的位置。 但是,集成测试是一种不同的情况,大多数情况下它们具有完全不同的要求。 例如,可以让您的单元测试在内存数据库中的h2上运行,…

通信原理-通信系统的组成

第一章 通信系统的组成 1、通信系统一般模型 发送设备:将信源产生的原始电信号变换成适合在信道中传输的形式。变换方式有调制、放大、滤波、编码、多路复用等。 信道:传输信号的通道.即传输媒质。在给子信号通道的同时,信道也会对信号产生损…

使用log4j2免费分配日志记录

介绍 最近,我正在为一个客户端工作,试图为大型精心制作的Java系统消除一些GC暂停。 经过分析后,我意识到大部分垃圾都是通过日志记录产生的! 是否有一种简单的方法来删除所有分配? 原来有:) 我应该使用哪个框架进行GC…

Verilog中fork...join 的用法

特点 中间的语句并行执行;(延时不累加) 不能用于综合; 代码 module signal_gen; reg wave; parameter cycle 5; initial beginforkwave 0;#(cycle) wave 1;#(2*cycle) wave 0;#(3*cycle) wave 1;#(4*cycle…

使用JWT的Cloud Native应用程序

本机云应用程序是为云计算环境开发的应用程序。 对于“ 什么是云原生应用程序 ”这个问题没有具体答案,但是必须满足不同的概念。 在我看来,最重要的功能之一就是能够快速缩放 。 这意味着我们的应用程序在每台服务器上都无法具有任何状态,…

stackexchange_通过Spring Social发推StackExchange问​​题

stackexchange1.简介 这是有关小型辅助项目的第三篇也是最后一篇文章-该机器人自动在专用帐户上发布来自各个Q&A StackExchange网站上的问题的推文(文章末尾的完整列表)。 第一篇文章讨论了为StackExchange REST API构建简单的客户端 。 在第…

使用JCache缓存方法结果

在JCache中,有一个方便的功能可以透明地缓存方法的结果。 您可以使用CacheResult注释托管bean的方法,并且将再次返回第一次调用的结果,而无需再次调用实际方法。 import javax.cache.annotation.CacheResult; // ...public class Calculator…