突出显示Java 10中新的Java局部变量类型推断功能

早在2016年,Java社区就掀起了新的JDK增强提案(JEP): JEP 286 。 现在,两年后,局部变量类型推断可以说是Java 10中最值得注意的功能。这是Java语言开发人员为简化Java应用程序编写所采取的又一个步骤。

在下面的文章中,我们将解释所有这些含义以及它将如何影响您的代码。

分解局部变量类型推断

这项新功能将为Java添加一些语法功能–简化它并改善开发人员的体验。 新语法将减少与编写Java相关的冗长性,同时保持对静态类型安全性的承诺。

换句话说,您无需指定关联的类型就可以声明变量。 声明如:

List <String> list = new ArrayList <String>();
Stream <String> stream = getStream();

将被以下新的简化语法取代:

var list = new ArrayList <String>();
var stream = getStream();

如您所见,Local Variable Type Inference将引入' var '关键字的使用,而不是要求明确说明变量的类型。

众所周知,Java有点冗长,在理解函数编写时您或其他开发人员的想法时可能会很不错。 但是,对于那些认为用Java开发软件过于繁琐的人来说,此功能标志着巨大的变化。

尽管类型推断不是Java中的新概念,但它是局部变量的新概念。

它是在Java 7中(作为Project Coin的一部分)通过菱形运算符(<>)引入的,该运算符允许在不使用类型绑定ArrayList <>的情况下初始化列表,而在Java 8中使用Lambda Formals进行引入。 例如,使用菱形运算符可以编写以下代码:

List <String> list = new LinkedList <String>();

现在,Oracle团队正在将其进一步发展。

社区回应

实际上,在JEP 286成为JEP之前……Oracle进行了一项调查 ,以更好地了解Java社区对该建议的看法。 在大多数情况下,调查着眼于对该提案的总体感觉以及社区如何实施该提案。 在回答的2,453个开发人员中,结果大部分是积极的:

调查问题:您如何看待建议的局部变量类型推断功能?

该调查的第二部分重点介绍了潜在的语法选择,建议根据其他语言(如C#,Scala,Swift,C ++)的相似用法或使用“ let ”来选择5个选项。

大多数用户投票赞成var / val选项:

可能的语法选项

最后,团队决定选择第二受欢迎的选择,仅var

Java社区的大多数成员似乎都赞成这种新选择,其中许多人都要求Oracle“与时俱进”。 反对该功能的少数开发人员声称,对于那些开始使用Java迈出第一步的人来说可能会很困难,或者指出现有语法是“冗长和易读性的正确组合”。

当然,在JEP 286摘要页面上,您可以找到添加新功能的以下理由:

“ Java几乎是唯一不包含局部变量类型推断的流行的静态类型语言。 在这一点上,这不再是一个有争议的功能”

这将如何影响您的代码?

一旦我们从系统中获得了对新功能的全部兴奋,通常我们要问自己的第一个问题是:这将如何影响我的代码? 在功能摘要中,“ Java所需的样板编码程度”是主要动机,因此我们可以期待将来省略清单类型声明。

更具体地说,治疗将限于:

  • 带有初始化器的局部变量
  • 增强的for循环中的索引
  • 在传统的for循环中声明的本地人

Oracle的Java团队声明它将不适用于:

  • 方法参数
  • 构造函数参数
  • 方法返回类型
  • 领域
  • 捕获形式(或任何其他类型的变量声明)

由于Java承诺支持Java的早期版本,因此我们可以假定它不会破坏向后兼容性。

加:GC改进和其他客房整理

JDK 10中有2个JEP专注于改进当前的垃圾回收(GC)元素。 第一个垃圾收集器接口(JEP 304)将引入一个干净的垃圾收集器接口,以帮助改善不同垃圾收集器的源代码隔离。

在当前的Java版本中,HotSpot源中散布着一些GC源文件。 在实现新的垃圾收集器时,这成为一个问题,因为开发人员必须知道在哪里寻找这些源文件。 该JEP的主要目标之一是为HotSpot内部GC代码引入更好的模块化,具有更简洁的GC接口,并使其更易于实现新的收集器。

计划用于Java 10的第二个JEP是用于G1的并行完全GC(JEP 307),它致力于通过使完全GC并行化来提高G1最坏情况的延迟。 G1在Java 9中成为默认的GC,此JEP的目标也是使G1并行化。

在Java 10计划的其他功能中,我们可以期望:

  • 线程本地握手(JEP 312)–这将引入一种在线程上执行回调的新方法,因此停止单个线程(不仅是所有线程或不停止所有线程)既可行又便宜。
  • 备用内存设备上的堆分配(JEP 316)–允许HotSpot VM在备用内存设备上分配Java对象堆,这将由用户指定
  • 附加的Unicode语言标签扩展(JEP 314)–目标是增强java.util.Locale及其相关API,以实现语言标签语法的附加unicode扩展(BCP 47)
  • 基于Java的实验性JIT编译器(JEP 317)– Oracle希望使其Java JIT编译器Graal能够在Linux / x64平台上用作实验性JIT编译器。
  • 根证书(JEP 319)–这里的目标是在Oracle Java SE中开源根证书
  • 根证书颁发机构(CA)计划,使OpenJDK构建对开发人员更具吸引力。 它还旨在减少OpenJDK和Oracle JDK构建之间的差异
  • 将JDK森林整合到一个单一的存储库中(JEP 296)–该JEP的主要目标是做一些内部管理,并将JDK森林的众多存储库合并到一个单一的存储库中
  • 删除Native-Header生成工具(javah)(JEP 313)–这很简单,很重要–从JDK删除了javah工具

请在家尝试一下

就像其他所有JDK版本一样,Oracle已经创建了一个早期访问版本,Java用户可以下载该版本以测试新功能。 实际上,该JEP自2016年初以来就可以进行试驾了,所以您还等什么呢?

即使您尚未开始考虑迁移到JDK 9,了解新功能并有机会向平台设计者提供反馈也是了解新版本并对其产生影响的好方法。社区。

最后的想法

最近,我们一直密切关注Java平台的开发。 自从去年9月发布Java 9以来,感觉整个平台已经完成了180次。他们向我们介绍了模块化Java,加上Mark Reinhold宣布JDK 10将在2018年3月发布,并且Java将转换为Java 9。 6个月的发布周期。

诸如Project Jigsaw之类的功能强大的项目阻止了Java的新版本的发布。 现在,我们将每6个月获得一个新版本,从2018年9月JDK 11开始,每3年就会提供长期支持版本。

基本上,不要太自在。 Oracle在未来几年中对Java平台制定了宏伟的计划。 现在,虽然,被抓到的最好的Java 9与我们的工程副总裁,和合Steingarten的, 就在这里 。

翻译自: https://www.javacodegeeks.com/2018/03/java-10-will-change-way-code.html

Java 10将如何改变您的编码方式相关推荐

  1. java改变变量编码方式_Java 10将如何改变您的编码方式

    java改变变量编码方式 突出显示Java 10中新的Java局部变量类型推断功能 早在2016年,Java社区就掀起了新的JDK增强提案(JEP): JEP 286 . 现在,两年后,局部变量类型推 ...

  2. java改变变量编码方式_Java 8中的5个功能将改变您的编码方式

    java改变变量编码方式 Java 8在JVM和语言级别都包含了一些非常令人兴奋的功能. 尽管最初为该发行版设想的某些功能已扩展到第9版,或已推出第9版,但实际上有数十个新功能. 许多新添加的内容在编 ...

  3. Java 8中的5个功能将改变您的编码方式

    Java 8在JVM和语言级别都包含了一些非常令人兴奋的功能. 虽然最初为该发行版设想的某些功能已扩大范围或已推出到第9版,但实际上有数十个新功能. 许多新添加的内容在编译器,JVM或帮助系统级别都进 ...

  4. Java 10的10个新特性,将彻底改变你写代码的方式

    转载自 Java 10的10个新特性,将彻底改变你写代码的方式 Java 9才发布几个月,很多玩意都没整明白,现在Java 10又要来了.. 这时候我真尼玛想说:线上用的JDK 7 甚至JDK 6,J ...

  5. 最通俗易懂的 Java 10 新特性讲解 | 原力计划

    作者 | 未读代码,CSDN 博主 封图 | CSDN 下载自 VCG 出品 | CSDN 博客 自从 Java 9 开始,Oracle 调整了 Java 版本的发布策略,不再是之前的 N 年一个大版 ...

  6. Java的编码方式、单个char类型存储大部分中文字符、getBytes()、new String()的转换流程

    目录 一 编码种类 1.1 ASCII码 1.2 ISO8859-1编码 1.3 GBK编码 1.4 Unicode字符集 1.4.1 UTF-8编码 1.4.2 UTF-16编码 1.4.3 UTF ...

  7. JAVA字码的转换_java字符编码转换研究(转)

    1. 概述 本文主要包括以下几个方面:编码基本知识,java,系统软件,url,工具软件等. 在下面的描述中,将以"中文"两个字为例,经查表可以知道其GB2312编码是" ...

  8. java string设置编码_详解Java中String类型与默认字符编码

    为什么写这个 至于为什么要写这个,主要是一句mmp一定要讲,绕了一上午,晕死 Java程序中的中文乱码问题一直是一个困扰程序员的难题,自己也不例外,早在做项目时就遇到过很多编码方式的坑,当时想填来着, ...

  9. 判断一段文件是UTF-8编码还是GB2312的编码方式

    分类: 算法 cpp2012-03-10 16:01 7120人阅读 评论(2) 收藏 举报 null生活c 对于只包含中文和英文的文本中判断编码方式是非常简单的,中文的编码方式最常用的是GBK,字符 ...

最新文章

  1. 《评人工智能如何走向新阶段》后记(再续4)
  2. 刘炽平:腾讯要以生态方式进行开放,不做“颠覆者”
  3. Xcode代码块的创建、使用和删除
  4. vector 用法小例子
  5. Java 数字相关操作通用类 NumberUtils.java
  6. Linux 系统下命令 unrar 的英文版使用说明
  7. oracle取日期最大的一条数据_Tableau可视化分析【2】如何连SQL数据查询
  8. tensorflow 读取cifar_对tensorflow中cifar-10文档的Read操作详解
  9. ubuntu在vmware下使用问题
  10. 《『若水新闻』客户端开发教程》——03.设计新闻分类UI(1)
  11. FastAdmin composer json 版本说明
  12. 学生选课系统代码-3mode【DB】视图层代码【MVC--M】代码
  13. UNBUNTU下与VirtualBox的WINDOWS共享文件夹
  14. 读书笔记:高等代数 上册
  15. 基于LabVIEW的音频信号采集分析系统
  16. HTML页面浏览历史,浏览历史记录功能
  17. 忽忽,抢楼机完成……
  18. Tilera多线程网络编程总结
  19. 《计算之魂》Task3:关于排序的讨论
  20. 【信息安全技术】RSA算法的研究及不同优化策略的比较

热门文章

  1. 21、mysql修改密码的方法总结
  2. Java Agent的隔离实现以及卸载时一些坑
  3. ​通俗理解神经网络BP反向传播算法
  4. Java 多线程 —— 深入理解 volatile 的原理以及应用
  5. 为什么总是喜欢看我桌面呢?
  6. hibernate+oracle+servlet实现插入数据的时候,不立马显示!!
  7. StringBuilder的使用
  8. Kafka启动出现Error: Could not create the Java Virtual Machine. Error: A fatal exception has occurred. Pr
  9. Properties类与IO流
  10. spring的bean范围_Spring Bean范围