如果一切按计划进行(我们正在研究Jigsaw项目),那么Java 9将在不到100天的时间内启动。 您可以在此处加入倒计时以发布它。 它将包含一长串新功能和升级功能,其中一些我们迫不及待想要看到实际应用。

但是,有些功能还没有为Java 9做好准备,这就是Project Amber出现的地方,因此这些功能可以成为现实。 这是什么意思? 让我们找出答案。

专注于Var / Val,Enums和Lambda

Java语言架构师Brian Goetz于去年1月首次提出了Amber项目,当时他提出创建一个项目来探索和孵化较小的,面向生产力的Java语言功能。

成为该项目一部分的功能的主要前提条件:已被接受为候选JEP,也称为JDK增强建议。 在此过程中,Oracle收集了有关Java开发工具包和OpenJDK增强功能的建议。 批准的提案将继续成为Java的实际功能。

Goetz指出,这个项目不是思考或讨论改进Java的新想法和随意想法的地方,并且“整个Internet仍然可以使用”。

3月16日,Goetz 欢迎Amber项目进入Java社区,并通过了前三个Java增强提案:

局部变量类型推断(JEP 286) –使用初始化程序将类型推断扩展到局部变量的声明
增强枚举(JEP 301) –使枚举更好的功能
Lambda剩菜(JEP 302) –改善lambda的可用性

为什么这三个项目受到如此特别的关注? 让我们找出答案。

满足琥珀项目的新功能

局部变量类型推断

大多数开发人员对Java的主要问题之一是它太冗长。 虽然在阅读并尝试理解编写函数时其他开发人员的想法时这可能是一件好事,但在实际编写这些函数时可能会很乏味。

此功能建议向Java添加一些语法糖以简化它。 这将允许声明变量而不必指定关联的类型。 例如,这:

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

将被替换为:

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

如果您想了解有关此功能的更多信息,以及社区对此有何看法,请查看我们的Java新本地变量类型推断语言功能动手概述 。

增强枚举

此功能的目标是增强Java语言中的枚举构造的表达能力。 如提案中所述,Java枚举是功能强大且常用的构造。 它们允许对常数进行分组,其中每个常数都是一个单例对象。 当变量必须等于为其预定义的值之一时,它将使变量成为一组预定义的常数。 例如,星期几。

增强功能将允许枚举类型变量(泛型支持),从而可以扩展枚举。 它还将对枚举常量执行更清晰的类型检查,以验证和强制执行枚举约束。

具有泛型支持的枚举将使我们能够指示键集及其关联的类型,并且我们能够向单个项目添加方法。 这两个功能将协同工作,以使枚举常量能够承载特定于常量的类型信息以及特定于常量的状态和行为。 增强的枚举将使我们能够使用通用类型定义枚举。 当表示数学常数时,可以显示此功能某些值的示例:

public enum MathematicalConstants < T > {E < Double > (Math.PI),PI < Double > (Math.E),ZERO < Integer > (0),ONE < Integer > (1),i < Complex > (new Complex(0, 1))private MathematicalConstants(T underlyingObject) {this.underlyingObject = underlyingObject;}
}

在此示例中,我们可以添加对其他方法的支持,同时仍然享受每种方法的类型安全性。 当底层对象不必是对象类型时,可以将不同类型传递给枚举的构造函数,这展示了此功能可以带来的优雅。

增强枚举的另一个有用应用是减少在不同数据类型之间转换的样板代码。 例如,jdbc类型转换为Java类型。 它可以帮助提高我们的代码自我记录的能力,并避免像“ instanceOf”检查那样的代码气味。

Lambda剩菜剩饭

Project Lambda于2014年随Java 8一起发布,但总有改进的余地。 这里的想法是通过增强方法上下文中函数表达式的歧义性来提高lambda表达式和方法引用的可用性。

此功能还着重于完成下划线字符的修复以指示未使用的lambda参数,并允许lambda参数对封闭范围中的阴影变量。

使用下划线作为未命名的lambda参数的符号的概念已经在其他语言中存在,其目标是也使其成为Java的一部分。 使用非常简单,看起来像这样:

BiFunction<Integer, String, String> biss = (i, _) -> String.valueOf(i);

它为什么如此重要? 因为这将允许对未使用的参数进行更强的静态检查,并且还允许将多个参数标记为未使用。 但是,执行该选项可能很困难,因为下划线已经是有效的标识符,并且需要进行一些调整和兼容性才能使其起作用。

Java的附带项目

Project Amber加入了诸如Valhalla之类的Java长期项目,以处理不可变且无引用的对象, Shenandoah旨在减少GC暂停时间和XRender Graphics Pipeline ,以创建新的Java2D图形管道为目标。 。

Lambda和Jigsaw是其中两个比较受人关注的项目。 Lambda项目是Java 8的一部分,于2014年3月引入,它将Lambda表达式和流引入Java。 Jigsaw项目即将成为Java 9的一部分,旨在使Java模块化并将JRE分解为可互操作的组件。

这两个项目都花费了大量的精力-Lambda于2009年12月首次引入,花了5年多的时间才成为Java的实际组成部分。 拼图是在2008年12月推出的,随后进行了将近9年半的工作。

这不一定意味着项目Amber将具有相同的时间表,但这很好地表明了将主要功能集成到Java中需要花费多长时间。 但是,在此项目的公告中充满了希望。

除了通常获得的邮件列表项目外,Goetz还发布了正式的回购协议。 与类似的项目不同,由于团队将处理多个JEP,因此将在分支中完成工作,而默认的JEP将同步到jdk10。 这是否意味着Amber可能会成为下一个Java版本的一部分? 我们将不得不拭目以待。

为什么是琥珀色?

如果您想知道名称及其名称,Java开发人员兼SitePoint Java部分的编辑Nicolai Parlog将这个问题发给了Brian Goetz本人。 他得到了一个简单的回答:“为什么不呢?”。

但是,Goetz建议举行比赛以提出候选人。 他亲自挑选了获胜者,并提供了以下解释:

@java @BrianGoetz @nipafx或更可能的是:琥珀在希腊语中被称为elektron,这可能意味着“阳光直射 ”(根据Wikipedia)

— Kwakeroni(@kwakeroni) 2017年3月28日

而且您必须承认这听起来很酷。

最后的想法

Java是一种具有许多功能,能力和程序员的大型语言。 Project Amber加入了已经在进行中的功能列表,所有这些功能都具有相同的目标-帮助开发阶段更快地进行,并满足Java工程师和开发人员的需求。

现在有两个主要问题– Project Amber将采用哪些其他建议,以及将它们变成Java现实需要多长时间。

翻译自: https://www.javacodegeeks.com/2017/05/project-amber-future-java-exposed.html

琥珀项目:Java的未来揭晓相关推荐

  1. Java的未来项目:巴拿马,织布机,琥珀和瓦尔哈拉

    新闻稿" Oracle Code One Java主题演讲概述了Java的未来 "在Oracle Code"突出未来项目" Valvala 项目,巴拿马 项目, ...

  2. 琥珀ai_琥珀项目:Java的未来暴露

    琥珀ai 如果一切按计划进行(我们正在研究Jigsaw项目),那么Java 9将在不到100天的时间内启动. 您可以在此处加入倒计时以发布它. 它将包含一长串新功能和升级功能,其中一些我们迫不及待想要 ...

  3. 琥珀项目:较小的,面向生产力的Java语言功能

    Brian Goetz最近的消息欢迎来到琥珀! 介绍Project Amber ( OpenJDK的一部分, 最初于1月提出 ). Goetz通过介绍"欢迎使用Amber项目,这是我们面向特 ...

  4. CodeOne 主题演讲:Java,未来已来

    在上一次JavaOne大会之后,首届Oracle CodeOne大会最近于美国旧金山举行.周一晚上主旨演讲的头条是"Java:未来已来(The Future of Java Is Today ...

  5. 专访黄勇:Java在未来的很长一段时间仍是主流

     专访黄勇:Java在未来的很长一段时间仍是主流 发表于2015-09-06 13:18| 11640次阅读| 来源CSDN| 70 条评论| 作者钱曙光 社区文旦专访黄勇架构框架JavaJava ...

  6. 红帽高级总监谈OpenJDK的未来:Java的未来从未如此光明

    随着Java 11的发布,Java最终完成了到OpenJDK一等项目的过渡.使用专有OracleJDK二进制文件的日子已经结束了.对Java开放性和免费的关注自然而然将Oracle以外的公司的贡献带入 ...

  7. java 怎么向串口发送指令_idea ssm项目java程序使用十六进制rxtx包向串口发送指令的方法...

    1.前提 idea ssm项目环境要配好,这里就不多赘述了,自己配好 2.下载配置rxtx包 官网下载:http://rxtx.qbang.org/wiki/index.php/Download 根据 ...

  8. 山东省能源产业项目动态及未来投资决策建议报告2021版

    山东省能源产业项目动态及未来投资决策建议报告2021版  HS--HS--HS--HS--HS--HS--HS--HS--HS--HS--HS--HS-- [修订日期]:2021年11月 [搜索鸿晟信 ...

  9. 学Java后未来发展方向和前景怎么样?

    学习Java成为Java程序员,进入IT行业,已经成为很多年轻人的选择.毕竟,Java开发薪资高.待遇好已经是公认的事实.那么,学Java后,未来的发展方向和前景怎么样呢?针对这些问题,小千就给大家分 ...

最新文章

  1. 102TimeStatistic
  2. CentOS 6.3编译安装Nginx1.2.2+MySQL5.5.25a+PHP5.4.5
  3. 计算机二级高级应用这么难,计算机二级考试越来越难的实锤!真实数据告诉你到底难在哪里?...
  4. python能制作游戏吗_没有Python不能做的游戏,这些游戏都可以做
  5. 编程语言分类 -- 强类型与弱类型、动态类型与静态类型
  6. 超干货 | 2019秋招CV算法面经
  7. eclipse乱码解决
  8. http请求/相应及如何在chrome中查看
  9. WPS-JS宏开发-基础知识-01-初识
  10. eyoucms如何管理栏目
  11. OverFeat(译)
  12. ios 打包分发全流程
  13. 石家庄地铁售票系统源代码
  14. 菜 根 谭 [明] 洪应明
  15. 计算机组成原理课程设计:在复杂模型机上编写机器指令与微程序计算海伦公式
  16. easyUI的高级查询
  17. php迭代什么意思,迭代关系什么意思
  18. Arcgis使用自定义的图标库-地图POI图标风格
  19. 个推数说中国42年冬奥史,可视化演绎冰雪奇缘
  20. FPGA设计编程(二) 8-3线优先编码器与3-8线译码器

热门文章

  1. 聊聊微服务架构及分布式事务解决方案
  2. vue.js 接收url参数
  3. Oracle入门(十四.4)之在PL / SQL中使用变量
  4. mybatis思维导图,让mybatis不再难懂(二)
  5. 数据结构(三)之单链表反向查找
  6. 《四世同堂》金句摘抄(十二)
  7. jQuery 操作元素
  8. 2018蓝桥杯省赛---java---B---8(日志统计)
  9. es6箭头函数(墙裂推荐)
  10. Hibernate的关联映射--一对多、