琥珀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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/335148.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL的存储过程和函数简单写法

什么是存储过程 简单的说&#xff0c;就是一组SQL语句集&#xff0c;功能强大&#xff0c;可以实现一些比较复杂的逻辑功能&#xff0c;类似于JAVA语言中的方法&#xff1b; ps:存储过程跟触发器有点类似&#xff0c;都是一组SQL集&#xff0c;但是存储过程是主动调用的&#…

python对excel求和_Python 两个Excel文件对应位置求和并存储

最近~老板给我的工作一直都有对大量的Excel的操作比如两Excel对应位置求和&#xff0c;并存储。(两Excel表格的第一列和第一行是一毛一样的&#xff0c;不需要求和&#xff0c;原样保存&#xff01;)本着能躺着就不坐着的原则&#xff0c;只想快点躺着&#xff0c;果断放弃了手…

zdal配置文件_Autofac的基本使用---4、使用Config配置

准备使用的表是Student&#xff0c;创建相关的IDAL、DAL、IBLL、BLL层。使用EF&#xff0c;创建一个Model层&#xff0c;存放edmx文件。创建一个Infrastructure层&#xff0c;基础设施项目&#xff0c;使用泛型类型。普通类型的使用1.APP.Config 配置信息此处有个需要注意的地方…

判断选择语句switch...case

switch(被检测量){ case 常量1: 语句1; break; case 常量2: 语句2; break; ... deault: 语句N; break; }被检测量的数据类型 基本数据类型&#xff1a;byte、short、int、char引用数据类型&#xff1a;String、enum 穿透 int num 2; switch(num){ case 1: System.out.print…

Java与Python:哪一个最适合您? [信息图]

通过从您的应用程序学习企业APM产品&#xff0c;发现更快&#xff0c;更有效的性能监控。 参加AppDynamics APM导览&#xff01; 在软件开发中&#xff0c;很少有问题比选择编程语言更具分裂性或部落性。 软件开发人员经常以自己选择的工具来强烈地认同自己&#xff0c;将客观…

怎么把php查询到的值显示到下拉框中_RazorSQL for Mac(数据库工具查询)8.5.3

razorsql mac版更新日志变化 查询结果&#xff1a;如果有多个查询结果选项卡&#xff0c;则从查询结果选项卡中选择比较查询结果选项将填充比较工具中的两个查询 漏洞修补 不需要重新启动razorsql才能生效的首选项需要重新启动 自动更新程序不适用于Windows计算机 缺少HBase连接…

docker删除es数据_木杉入门Elasticsearch(4):安装ES

木杉入门本系列的目标是在本地搭建一个Elasticsearch的服务集群&#xff0c;通过在阿里云服务器搭建FRP通道对外提供服务&#xff0c;为小规模应用提供一种高性价比的解决思路。系列内容&#xff1a;木杉入门Elasticsearch(1)&#xff1a;ESXI虚拟机安装CentOS木杉入门Elastics…

MySQL数据库常用命令_常用SQL语句及命令_MySQL常用语句

文章目录一、常用的 SQL 语句&#xff08;一&#xff09;查看当前登录用户&#xff08;二&#xff09;查看当前数据库&#xff08;三&#xff09;如何查看全部用户&#xff1f;&#xff08;四&#xff09;创建数据库&#xff08;五&#xff09;选择要操作的数据库&#xff08;六…

spock_在扩展Spock时输出给定值

spockSpock是一个Java测试框架&#xff0c;由GradleWare的软件工程师Peter Niederwieser于2008年创建&#xff0c;它可以促进BDD的发展。 利用这个 例如 &#xff0c;一个故事可以定义为&#xff1a; Story: Returns go to stockAs a store owner In order to keep track of …

将serversocket 写在按钮事件中连接不上_Java服务器的模型—TCP连接/流量优化

本文很长哦&#xff0c;但请给我一点时间。通常&#xff0c;我们的应用程序不需要并行处理成千上万的用户&#xff0c;也不需要在一秒钟内处理成千上万的消息。我们只需要应付数十或数百个并发连接的用户&#xff0c;就可以在内部应用程序或某些微服务应用程序中承受如此大的负…

ios 开发设置左滑退出_苹果铃声怎么设置自己的歌?教你用手机快速搞定!

苹果手机铃声怎么设置为自己喜欢的歌曲&#xff1f;由于iOS系统的封闭性&#xff0c;想要给苹果手机更换铃声不像在安卓手机一样那么方便&#xff0c;看到网上很多教程也是需要使用电脑才能完成铃声的设置&#xff0c;有没有不复杂的方法来直接帮我们更换手机铃声&#xff1f;别…

dp括号匹配 网易面试题_面试题:大括号验证

dp括号匹配 网易面试题这是较容易的编码任务之一&#xff0c;但是您仍然可以在一些初步的技术筛选中达到目标。 问题看起来像这样&#xff1a; 给定仅包含字符( &#xff0c; ) &#xff0c; { &#xff0c; } &#xff0c; [和]的字符串&#xff0c;请确定输入字符串是否有效…

MySQL如何删除有外键约束的数据

在数据库中查看外键是否有效,值为1表示外键有效 mysql> select foreign_key_checks; ---------------------- | foreign_key_checks | ---------------------- | 1 | ---------------------- 1 row in set (0.00 sec)将外键的值设置为0&#xff0c;此时…

python绘制动画示例_Python使用matplotlib绘制动画的方法

本文实例讲述了Python使用matplotlib绘制动画的方法。分享给大家供大家参考。具体分析如下&#xff1a;matplotlib从1.1.0版本以后就开始支持绘制动画下面是几个的示例&#xff1a;第一个例子使用generator&#xff0c;每隔两秒&#xff0c;就运行函数data_gen&#xff1a;# -*…

基于单片机步进电机ppt答辩_基于MCU和DSP的步进电机控制技术分析

来源 | 控制与传动步进电机已经渗透入我们生活的方方面面&#xff0c;本文介绍了一些重要的步进电机相关技术&#xff0c;为开发人员基本了解步进电机的工作原理提供了足够的信息&#xff0c;同时也介绍了用微控制器或数字信号处理器控制步进电机的方法。步进电机也叫步进器&am…

拼图登陆拼图二维码验证_另一个拼图观点

拼图登陆拼图二维码验证在过去的几周中&#xff0c;围绕Java 9即将发布及其最著名的功能&#xff1a;Java平台模块系统JPMS进行了激烈的辩论。 –以其项目名称Jigsaw更为人所知。 模块系统以正式规范过程的形式引入Java生态系统 – JSR –需要由专家组以最终形式批准。 在该专…

【C++】多线程(四)

这是多线程的最后一篇文章。 std::promise promise 的作用很简单&#xff0c;在一个线程t1中保存一个类型typename T的值&#xff0c;可供相绑定的std::future对象在另一线程t2中获取。事实上&#xff0c;它与future基本是成对出现的。来看下面的例子&#xff1a; //声明一个…

广告设计师如何使用python_设计师必看!高效率工具,30分钟完成别人一天的工作!...

原标题&#xff1a;设计师必看&#xff01;高效率工具&#xff0c;30分钟完成别人一天的工作&#xff01;世界上只有两种物质&#xff1a;高效率和低效率&#xff1b;世界上只有两种人&#xff1a;高效率的人和低效率的人。—— 萧伯纳今天这篇文章主要想和大家分享一个效率工具…

Linux/MacOS/Mac OS 命令终端/命令行如何查找文件/搜索文件和删除文件

文章目录问题一&#xff1a;我要在当前目录下查找名称中含有“Lib”的文件和目录&#xff0c;注意不要在子目录下查找问题二&#xff1a;在当前目录下如何删除名称中含有“abc”的文件和文件夹问题一&#xff1a;我要在当前目录下查找名称中含有“Lib”的文件和目录&#xff0c…

div获取第一个子节点jquery_【antd】Tree组件子节点不完全勾选获取父节点的值

注意⚠️&#xff1a;这篇文章适用于后台返回的树结构比较多的情况下&#xff0c;如果数据比较少的情况下&#xff0c;可以参考我的上一篇文章&#xff0c;操作起来比较简单我们在实际操作tree组件和后台交互的时候一般都是需要将父节点传过去&#xff0c;如图&#xff1a;点击…