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

琥珀ai

如果一切按计划进行(我们正在研究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是一种大型语言,具有许多功能,能力和程序员。 Project Amber加入了已经在进行中的功能列表,所有这些功能都具有相同的目标-帮助开发阶段更快地进行,并满足Java工程师和开发人员的需求。

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

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

琥珀ai

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值