java7和java8切换_切换表达式到Java吗?

java7和java8切换

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

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

JEP的Switch Expression草案在其“动机”部分指出:“当我们准备增强Java语言以支持模式匹配时 ,现有的switch语句的一些不规则性(长期以来一直困扰着用户)成为障碍。” JEP草案具有很高的可读性,并包含有趣的讨论点和说明性的代码示例,这些示例说明Java switch语句当前在其他Java构造函数中通常如何有效地用作表达式。 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子句指定适用于相同行为的三个值。

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

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

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

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

java7和java8切换

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

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

相关文章

Xenix 操作系统的简史

简介 Xenix 是一种UNIX操作系统,可在个人电脑及微型计算机上使用。该系统由微软公司在1979年从美国电话电报公司获得授权,为Intel处理器所开发。后来,圣克鲁兹作业公司(SCO)收购了其独家使用权,自那以后&a…

servlet 配置 使用_配置HTTPS以与Servlet一起使用

servlet 配置 使用要配置Java EE应用程序以通过HTTPS进行通信,需要在web.xml文件中使用几行XML。 web.xml文件位于项目的WEB-INF目录中,通常在IDE生成Java EE Web应用程序时自动创建。 如果不是,您可以自己创建它。 HTTPS的动机 为Web应用程…

python写接口测试代码_python写运单接口测试(增改查)完整代码

importrequestsimportjsonfrom urllib importparseclassHttpWayBillRquest:运单的增改查 defaccess_token(self):获取tokenurl http://xxxxxxxxx.comusername 12333password 12334566res_json requests.get(url, auth(username, password)).json()print(access_token的结果为&a…

linux终端cd未找到命令,为什么`which`命令不能用于`cd`?我也找不到`cd`的可执行文件!...

问题描述我尝试了which cd,它没有给出路径,而是返回退出代码1(用echo $?检查)。 coreutil cd本身正在工作,所以可执行文件应该在那里,对吧?我还为cd运行了find,但没有显示可执行文件。那怎么实现呢&#x…

Xenix — 微软与UNIX的短暂爱恋

微软向外宣布Microsoft Xenix OS,一个为16位微处理器开发的可移植的操作系统。它是一个交互的,多用户多任务系统,可以运行在Intel 8086, Zilog Z8000, Motorola M68000以及DEC公司的PDP-11系统计算机上。所有微软已经开发的系统软件&#xff…

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

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

python排序sorted_sorted排序的两个方法 - Python

在给列表排序时,sorted非常好用,语法如下: sorted(iterable[, cmp[,key[,reverse]]]) 简单列表排序,很容易完成,sorted(list)返回的对象就是列表结果,但是遇到列表中嵌套元组时,需要使用特殊的方…

linux vim自动执行快捷键,Linux Vim快捷键操作命令整理

VIM中常用的替换模式总结1,简单替换表达式替换命令可以在全文中用一个单词替换另一个单词::%s/four/4/g“%” 范围前缀表示在所有行中执行替换。最后的 “g” 标记表示替换行中的所有匹配点。如果仅仅对当前行进行操作,那么只要去掉%即可如果…

Mach 微内核的命名趣闻

据 Tevanian 说,MACH,源于一个读音错误。当时他正和其他人在匹兹堡一个下雨天里一边躲避着路上的泥水坑,一边讨论着新内核的事,Tevanian开玩笑地建议他们的新微核命名为MUCK,意为“多用户通信内核”(Multi-…

eclipse占用内存过大_Java性能调优学习(三)-jmap+mat分析内存溢出问题实战

上一节我们讲了jinfo,jstat,jmap的使用,还简单的讲了下如何使用jmap导出内存映像文件,这次,我们来实战一把内存溢出问题。环境准备首先我们先模拟一下内存溢出的场景,以下这段代码在访问后肯定会造成堆内存…

spring boot自测_将测微仪与Spring Boot 2一起使用

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

arch linux界面优化,Archlinux 启动优化

内核参数优化修改/boot/grub/grub.cfg 添加libahci.ignore_sss1 #禁用sssraidnoautodetectipv6.disable1 #禁用ipv6nomodeset #不使用kms,plymouth.enable0 #禁用plymouthrootfstypeext4 #root分区类型selinux0#禁用selinux 完成后:linux /vmlinuz-lin…

微软和 Windows 的发展简史

20世纪60年代中期,美国达特茅斯学院院长、匈牙利人约翰凯梅尼(J. Kemeny)和数学系教授托马斯卡茨(Thomas E. Kurtz)认为,像FORTRAN(世界上最早出现的计算机高级程序设计语言)那样的语…

elaseticsearch 配置ik分词器的热更新_Elasticsearch从入门到放弃:分词器初印象

Elasticsearch 系列回来了,先给因为这个系列关注我的同学说声抱歉,拖了这么久才回来,这个系列虽然叫「Elasticsearch 从入门到放弃」,但只有三篇就放弃还是有点过分的,所以还是回来继续更新。之前我们聊过了 Elasticse…

java api限流_Java 9:流API的增强

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

服务器windows模拟linux环境,科学网—Windows不用虚拟机或双系统,轻松实现shell环境:gitforwindows - 刘永鑫的博文...

windows缺少shell命令支持用过Linux服务器分析数据的小伙伴,一定对Linux强大Shell命令所折服,经常会感觉windows缺少这些命令而感觉不方便。还有想学习Linux Shell命令的小伙伴,一直没有一个很好的学习环境。双系统安装涉及分区改变对硬盘数据…

Mac OS 系统的发展历史

文章目录System 1.0(1984)System 2.0(1985)System 3.0(1986)System 4.0(1987)System 5.0(1987)System 6.0 (1988)System 7 (1991 )Sys…

pythonselenium兼容性_对于旧版Google Chrome,无法在Python中使用Selenium找到Chrome

出于兼容性原因,我更喜欢将Chrome版本55.0.2883.75与Chromedriver v.2.26一起使用。我从https://www.slimjet.com/chrome/google-chrome-old-version.php和Chromedriver 2.26从https://chromedriver.storage.googleapis.com/index.html?path下载了较旧版本的chrome…

弱投影模型_通过投影增强数据模型

弱投影模型介绍 数据模型可能很棘手。 建模可能会更加困难。 有时候,应该放入数据库表中的信息不一定是我们要在每段代码中使用的信息。 和其他许多次一样,Spring来了。 一个称为投影的小功能可以帮助我们在普通界面中仅用几行数据映射数据。 在本文中…

苹果公司的电脑发展史——硬件篇

文章目录一、Apple I(1976)二、Apple II(1977)三、Lisa(1983)四、Macintosh(1984)五、PowerBook(1991)六、iMac(1998)七、iBook&#…