已创建一个标题为“ 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

切换表达式到Java吗?相关推荐

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

    java7和java8切换 已创建一个标题为" Java语言的开关表达式"的JEP草案 . 当前的"摘要"状态为:"扩展switch语句,以便可以将其 ...

  2. java拉姆达表达式事例,Java Lambda表达式详解和实例

    简介 Lambda表达式是Java SE 8中一个重要的新特性.lambda表达式允许你通过表达式来代替功能接口. lambda表达式就和方法一样,它提供了一个正常的参数列表和一个使用这些参数的主体( ...

  3. jep290涉及jdk版本_JDK 14 – JEP 361从预览中切换表达式

    jep290涉及jdk版本 在我的前一篇文章中 ,我写了有关作为JDK 12的预览功能发布的开关表达式和相关增强功能的信息.随后,在JDK 13中提出了一些更改,例如使用yield关键字从switch ...

  4. JDK 14 – JEP 361从预览中切换表达式

    在我以前的文章中 ,我写了有关作为JDK 12的预览功能发布的开关表达式和相关增强功能的信息.随后,在JDK 13中提出了一些更改,例如使用yield关键字从switch块返回值并在预览中发布. 在即 ...

  5. java调用el_[Java教程][javaEE] EL表达式调用java方法

    [Java教程][javaEE] EL表达式调用java方法 0 2016-07-03 18:00:03 1.新建个类,类里面定义静态方法 package com.tsh.utils;import j ...

  6. lambda 对象去重_采用java8 lambda表达式 实现 java list 交集 并集 差集 去重复并集...

    采用java8 lambda表达式 实现java list 交集/并集/差集/去重并集 一般的javaList 交.并集采用简单的 removeAll retainAll 等操作,不过这也破坏了原始的 ...

  7. 【原】简单的鼠标切换左右键(java版)

    简单的鼠标切换左右键(java版) 0. 写在最前面 客户需要一个能切换左右键的小功能满足使用需要. 具体需要如下: 我需要一个独立运行的窗口,在其中输入数字x,按下"转换"按钮后 ...

  8. java后缀表达式_表达式计算 java 后缀表达式

    题目: 问题描述 输入一个只包含加减乖除和括号的合法表达式,求表达式的值.其中除表示整除. 输入格式 输入一行,包含一个表达式. 输出格式 输出这个表达式的值. 样例输入 1-2+3*(4-5) 样例 ...

  9. 采用java8 lambda表达式 实现 java list 交集 并集 差集 去重复并集

    采用java8 lambda表达式 实现java list 交集/并集/差集/去重并集 一般的javaList 交.并集采用简单的 removeAll retainAll 等操作,不过这也破坏了原始的 ...

最新文章

  1. python加号换行,Python字符串拼接六种方法介绍
  2. vivo U1正式亮相
  3. 计算机专业毕业论文的参考文献,计算机专业毕业专著类参考文献 计算机专业毕业论文参考文献哪里找...
  4. 如何在Anaconda中安装Pytorch
  5. Ubuntu16.04在线安装MongoDB详细教程
  6. c语言中宏替换时的顺序
  7. delphi 提示class tparamlistbox not found_通达信主图K线变色波段提示指标公式
  8. 编译原理0909的作业
  9. Web前端优化,提高加载速度
  10. 马斯克辞任董事长,罚款2000万美元,钢铁侠一夜服软
  11. 在 Visual Studio 2010 中配置SharpPcap
  12. 汽车零部件开发工具巨头V公司全套bootloader中UDS协议栈源代码,自己完成底层外设驱动开发后,集成即可使用
  13. 关于伪分布式hadoop集群及HBase安装的一些记录(基于林子雨老师的大数据软件安装和基础编程)
  14. Unity3d 技巧(9) 游戏上线必备 适配Steam 安装包需要用到的资料
  15. 原子结构示意图全部_原子结构示意图知识点总结
  16. Github优质项目推荐(附国内Gitee地址)
  17. 利用Retrofit, RxJava获取网络内容
  18. CTF writeup 0_IDF实验室
  19. 形式逻辑三大基本要素-推理的本质
  20. java打包把依赖也打进去_maven打包时把依赖的jar包打进去

热门文章

  1. 解决idea启动项目报错:Unable to open debugger port(127.0.0.1:60157):java.net.SocketExceptionsocket closed
  2. selenium以及chromdrive安装
  3. 【最全最详细】publiccms其他常用代码片段(内容、站点)
  4. “老师,请您多关注一下我吧!!!”
  5. 2013蓝桥杯-B-省赛-六-三部排序
  6. 量子计算机对人类长寿,科学家称“极端长寿”在未来几十年可能会达到新的里程碑...
  7. win10控制视频声音大小
  8. java虚拟机的内存模型_JVM(Java虚拟机)内存模型(转载/整理)
  9. spring boot 入门荔枝
  10. 高特权级代码段转向低特权级代码段(利用 ret(retf) 指令实现 jmp from ring0 to ring3)