JDK将新增局部变量类型推断功能

OpenJDK 提出一个新的计划, 准备为 Java 增加局部变量类型推断功能(local-variable type inference capability), 这让代码编写更简单, 同时也保证原有的静态类型安全特性。

该计划于3月8号提出,文档地址为: JEP-286(JDK Enhancement Proposal,JDK增强方案)。 目前没有指定具体在哪个JDK版本中实现。

提案中说:

“We seek to improve the developer experience by reducing the ceremony associated with writing Java code while maintaining Java’s commitment to static type safety by allowing developers to elide the often-unnecessary manifest declaration of local variable types, (我们致力于改善编码体验, 减少非必要的代码量,同时保持Java静态类型安全的承诺,允许开发者省略不必要的类型声明).”

其他静态类型语言, 如 C++, Scala, 和 Go,都已经实现了局部变量类型推断。

JEP 中强调:

“Java is nearly the only popular statically typed language that has not embraced local-variable type inference,( Java应该是最流行的几种静态类型语言中, 唯一不支持局部变量类型推断的). ”

“At this point, this should no longer be a controversial feature.(在这一点上,应该不会有太多争议).”

Java开发人员经常会发现标准样板代码体积臃肿。

“Manifest type declarations for locals are often perceived to be unnecessary or even in the way; given good variable naming, it is often perfectly clear what’s going on, (本地变量的类型清单通常来说是非必须的,指定一个有意义的变量名比什么都好).”

JEP中写到。

“The need to provide a manifest type for every variable also accidentally encourages developers toward overly complex expressions; with a lower-ceremony declaration syntax, there is less disincentive to break complex chained or nested expressions into simpler ones.(为每个变量指定类型也可能会导致写出很复杂的语句, 简化语法声明, 可以有效减少复杂的链式调用, 将嵌套表达式分解为简单语句。)”

该计划限制了类型推断的使用场景: 有初始值的局部变量, 增强型for循环中的index, 普通for循环里的局部变量

“Quantitatively, we want that a substantial percentage of local variable declarations in real code bases can be converted using this feature, inferring an appropriate type.(在数量上, 我们希望可以根据这个特性,将绝大部分的局部变量, 推导出一个适当的类型声明。)”

OpenJDK作为Java SE 的开源实现, 由Oracle提供支持。JavaSE 9 是Oracle官方的下一代版本,即将在一年以内发布。JEP-286由Oracle的 Java平台组(Java platform group)首席架构师 Mark Reinhold 背书。

欢迎加入: CNC开源组件交流群 316630025

原文链接: http://www.javaworld.com/article/3044554/java-language/openjdk-plan-would-make-java-coding-easier.html

原文日期: 2016年03月15日

翻译日期: 2016年03月17日

翻译人员: 铁锚 http://blog.csdn.net/renfufei

时间: 2024-12-23 18:10:06

JDK将新增局部变量类型推断功能的相关文章

Java 10 实战第 1 篇:局部变量类型推断

现在 Java 9 被遗弃了直接升级到了 Java 10,之前也发过 Java 10 新特性的文章,现在是开始实战 Java 10 的时候了. 今天要实战的是 Java 10 中最重要的特性:局部变量类型推断,大家都知道是 var 关键字,但具体怎么使用,及要注意什么要点呢? 我们通过几个例子来讲解局部变量类型推断这个新特性! 什么是局部变量类型推断 var javastack = "javastack"; System.out.println(javastack); 大家看出来了,局

JDK11 | 第三篇 : 局部变量类型推断

文章首发于公众号<程序员果果> 地址 : https://mp.weixin.qq.com/s/PB0Mw4bzjDML7nto2M8x2w 一.简介 Java局部变量类型推断(LVTI),简称var类型(标识符var不是一个关键字,是一个预留类型名),Java10中新添加的功能.作为100%编译特征,它不会影响字节码,运行时或者性能.在编译时,编译器会检查赋值语句右侧代码,从而推断出具体类型.它查看声明的右侧,如果这是一个初始化语句,它会用那个类型取代var.另外,它非常有助于减少冗余代码和

WebKit Web Inspector增加覆盖率分析和类型推断功能

WebKit中的Web Inspector(Web检查器)主要用于查看页面源代码.实时DOM层次结构.脚本调试.数据收集等,日前增加了两个十分有用的新功能:覆盖率分析和类型推断.覆盖率分析工具能够可视化地精确显示JavaScript程序执行的部分.类型推断工具则可以直观地给重要变量加上类型信息的注释.这两项功能使得在Web Inspector中理解和调试JavaScript程序变得更加简便,编程体验得到了极大的提升. 覆盖率分析功能理解程序如何工作是一件复杂而繁琐的过程,需要知道在特定的输入情况

java 11 局部变量类型推断

什么是局部变量类型推断? var javastack = "javastack"; System.out.println(javastack); 大家看出来了,局部变量类型推断就是左边的类型直接使用 var 定义,而不用写具体的类型,编译器能根据右边的表达式自动推断类型,如上面的 String . var javastack = "javastack"; 就等于: String javastack = "javastack"; 在声明隐式类型的l

scala学习手记17 - 容器和类型推断

关于scala的类型推断前面已经提到过多次.再来看一下下面这个例子: import java.util._ var list1: List[Int] = new ArrayList[Int] var list2 = new ArrayList[Int] list2 add 1 list2 add 2 var total = 0 for (index <- 0 until list2.size()) { total += list2.get(index) } println("Total i

基于 Python 3 新增的函数注解(Function Annotations )语法实现参数类型检查功能

2016-01-06 python python 3 / Function Annotations 函数注解(Function Annotations) 类型检查 参考资料 函数注解(Function Annotations) 函数注解语法 可以让你在定义函数的时候对参数和返回值添加注解: def foobar(a: int, b: "it's b", c: str = 5) -> tuple: return a, b, c a: int 这种是注解参数 c: str = 5 是

【转】解析JDK 7的动态类型语言支持

http://www.infoq.com/cn/articles/jdk-dynamically-typed-language Java虚拟机的字节码指令集的数量自从Sun公司的第一款Java虚拟机问世至JDK 7来临之前的十余年时间里,一直没有发生任何变化[1].随着JDK 7的发布,字节码指令集终于迎来了第一位新成员——invokedynamic指令.这条新增加的指令是JDK 7实现“动态类型语言(Dynamically Typed Language)”支持而进行的改进之一,也是为JDK 8

C++11新特性:自动类型推断和类型获取

声明:本文是在Alex Allain的文章http://www.cprogramming.com/c++11/c++11-auto-decltype-return-value-after-function.html的基础上写成的. 加入了很多个人的理解,不是翻译. 转载请注明出处 http://blog.csdn.net/srzhz/article/details/7934483 自动类型推断 当编译器能够在一个变量的声明时候就推断出它的类型,那么你就能够用auto关键字来作为他们的类型: [c

RDIFramework.NET V2.9版本号 WinFom部分新增与修正的功能

RDIFramework.NET  V2.9版本号 WinFom部分新增与修正的功能 转眼间RDIFramework.NET框架走了快6个年头了,随着一个版本号一个版本号的升级改造,如今已经越来越完美了.使用的客户也越来越多,经受住了大量实战项目的考验! RDIFramework.NET V2.9 WinForm版在2.8的基础上添加与修正了大量功能.包含:对多语言的支持.模块操作权限项设置.添加起始页(对经常使用功能列表在起始页展示).新增新的字典字典管理界面,提供对"树"类型的数据