新的JEP草案将简化Java中的撰写

偏爱继承而不是继承

有充分的理由,“在继承中偏爱组成”这一口头禅在文献中已多次重复。 但是,Java很少或根本没有语言支持来简化对象的组成。 但是,有了名为“简洁方法机构”的新的JEP草案,情况可能会略有改善。

Brian Goetz负责JEP草案,该草案很可能将在项目“ Amber”下处理。 完整的草稿可以在这里找到。

简洁的方法体

JEP在实施时允许使用一种称为“简明方法体(CMB)”的方法,从广义上讲,方法主体可以是lambda或方法引用。 这是一个例子:

老式:

int length(String s) {return s.length();
}

新的CMB:

int length(String s) -> s.length();     //  -> is "single expression form"

或者简单地:

int length(String s) = String::length;  //  = is "method reference form"

这将减少样板代码,同时提高代码的可读性。

组成

考虑现有的Java类
Collections.UnmodifiableList委托一个内部
List类并防止对其进行修改(缩短代码并重新排序以提高可读性):

static class UnmodifiableList<E> extends UnmodifiableCollection<E>implements List<E> {final List<? extends E> list;UnmodifiableList(List<? extends E> list) {super(list);this.list = list;}public boolean equals(Object o) {return o == this || list.equals(o);}public int hashCode()           {return list.hashCode();}public E get(int index) {return list.get(index);}public int indexOf(Object o)            {return list.indexOf(o);}public int lastIndexOf(Object o)        {return list.lastIndexOf(o);}public E set(int index, E element) {throw new UnsupportedOperationException();}

使用CMB,可以这样实现:

static class UnmodifiableList<E> extends UnmodifiableCollection<E>implements List<E> {final List<? extends E> list;UnmodifiableList(List<? extends E> list) {super(list);this.list = list;}public boolean equals(Object o) = list::equals;public int hashCode()           = list::hashCode;public E get(int index)         = list::get;public int indexOf(Object o)    = list::indexOf;public int lastIndexOf(Object o)= list::lastIndexOf;public E set(int index, E element) {throw new UnsupportedOperationException();}

我认为此功能很有意义。 当委派具有一个或多个参数的方法时,此功能特别有用。

翻译自: https://www.javacodegeeks.com/2018/09/composition-in-java-jep-draft.html

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

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

相关文章

应用层组播、IP组播

通常说的组播一般指IP组播&#xff0c;IGMP协议等 什么是应用层组播&#xff1f; 应用层组播通过在应用层复制和缓存数据包而不是在路由器上复制数据包来避免IP组播的部署问题。应用层组播无须对路由器作任何修改,因此在 Internet 上非常容易部署 为了改善网络效率&#xff0…

android 酷炫倒计时,android 好用的倒计时

android倒计时 是在原有TextView的基础上进行二次开发的自定义View效果图这个主要是结合了android的CountDownTimer&#xff0c;这个一般就是发送短信的倒计时。包含功能倒计时时间超过一个小时显示 时&#xff1a;分&#xff1a;秒时间小于一小时显示&#xff1a;分 &#xff…

android 获取对象,在Android中获取LayoutInflater对象的方法

1、通过系统服务来获得&#xff0c;这是最标准的&#xff1a;LayoutInflater inflater (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);2、通过LayoutInflater的静态方法获得&#xff1a;LayoutInflater inflater LayoutInflater.from(context)…

音视频常见问题分析和解决:延迟(时延 delay)和抖动

延迟和抖动 延迟&#xff1a;是网络传输中的一个重要指标&#xff0c;测量了数据从一个端点到另外一个端点所需的时间。一般我们用毫秒作为其单位。通常我们也把延迟叫做延时&#xff0c;但是延时有时还会表示数据包发送端到接受端的往返时间。这个往返时间我们可以通过网络监…

forkjoin_应用ForkJoin –从最佳到快速

forkjoin到目前为止&#xff0c;JDK 7已很好地掌握在开发人员手中&#xff0c;并且大多数人都听说过ForkJoin&#xff0c;但是没有多少人有时间或机会去尝试它。 它引起了并且可能仍然引起一些混乱&#xff0c;与普通线程池有什么不同。 [1] 我在本文中的目标是通过一个代码示…

android usb触摸屏驱动 win10,Win10手机居然这样兼容安卓:直接运行apk!

摘要&#xff1a;“应用太少是硬伤&#xff01;”这是WP粉吐槽微软简洁而有力的一句话。最新的Win10Mobile预览版中首次引入了微软的安卓子系统&#xff0c;这也是微软推行的ProjectAstoria的一部分。那么Win10手机究竟要如何兼容安卓应用呢&#xff1f;微软最新一份招聘启事似…

GSM、UMTS、LTE

GSM 全球移动通信系统(Global System for Mobile Communications) &#xff0c;由欧洲电信标准组织ETSI制订的一个数字移动通信标准。它的空中接口采用时分多址技术。自90年代中期投入商用以来&#xff0c;被全球超过100个国家采用。GSM标准的无处不在使得在移动电话运营商之间…

Java应用程序中的验证

我经常看到的项目几乎没有任何有意识的数据验证策略。 他们的团队在截止日期&#xff0c;明确要求的巨大压力下工作&#xff0c;只是没有足够的时间以适当且一致的方式进行验证。 因此&#xff0c;数据验证代码随处可见&#xff1a;JavaScript片段&#xff0c;Java屏幕控制器&a…

android daemon 程序,(转)Android App Daemon

一直没空把App Daemon的原理整理一下&#xff0c;见不少人在问原理&#xff0c;我这里就把整个流程大概的说一下。关于进程守护&#xff0c;从接触Android没多久就一直想实现&#xff0c;网上给出的方案也是各种各样&#xff0c;有双服务方式&#xff0c;有利用系统定时器方式的…

什么是卫星的有效载荷?

直接执行特定卫星任务的仪器、设备或分系统就是卫星的有效载荷。 有效载荷是指航天器上装载的为直接实现航天器在轨运行要完成的特定任务的仪器、设备、人员、试验生物及试件等。 有效载荷的种类很多&#xff0c;即使是同一种类型的有效载荷&#xff0c;性能差别也很大。 返回型…

升级鸿蒙系统如何退出,华为鸿蒙2.0系统升级了怎么退回EMUI11系统-操作教程详解...

华为鸿蒙2.0系统升级了怎么退回EMUI11系统&#xff1f;很多用户升级了又不知道如何才能退回到原来的系统&#xff0c;下面就让老铁下载小编为大家带来&#xff0c;2.0系统升级退回EMUI11系统操作教程详解。这次开启华为鸿蒙2.0系统手机开发者beta版公测招募的机型有华为P40 、P…

OpenFlow和SDN的历史和原理介绍

OpenFlow相关的历史、新闻&#xff1a;http://blog.csdn.net/jincm13/article/details/7825754 起源与发展 【https://36kr.com/p/5035985】   OpenFlow起源于斯坦福大学的Clean Slate项目组 [1] 。CleanSlate项目的最终目的是要重新发明英特网&#xff0c;旨在改变设计已略…

可见性得以保障,并不意味着_战略模式并不意味着春天!

可见性得以保障,并不意味着是的&#xff0c;所以可以说您正在编写一个Spring MVC应用程序&#xff0c;然后您决定&#xff1a;“我想做一些单独的封装算法&#xff0c;这些算法可以互换来执行特定的行为”。 对此的经典回应是“您需要一个战略模式男孩&#xff01;”。 所以&a…

小米miuiVS华为鸿蒙,华为鸿蒙2.0 vs 小米MIUI 12.5

原标题&#xff1a;华为鸿蒙2.0 vs 小米MIUI 12.5不久前有媒体在视频中展示了鸿蒙2.0和苹果IOS14两个操作系统下App的启动速度&#xff0c;结果是鸿蒙2.0完胜IOS14。此后不久&#xff0c;该媒体发布了华为鸿蒙2.0和小米MIUI 12.5对比视频。同上次一样&#xff0c;这次依然是选择…

传播时延(propagation delay)与发送时延(transmission delay)

原文&#xff1a; http://wzw19191.blog.sohu.com/135110823.html 传播时延(propagation delay)这个概念&#xff0c;是指电磁信号或者光信号在传输介质中传输的时延&#xff0c;而在光纤或者铜线中&#xff0c;光信号和电磁信号的传播速度都在20万公里/秒以上&#xff0c;在传…

具有MicroProfile配置的可配置JAX-RS ExceptionMapper

当您使用JAX-RS创建REST服务时&#xff0c;通常要么不返回任何内容&#xff08;例如HTTP 201/2/4等&#xff09;&#xff0c;要么返回某些数据&#xff08;可能采用JSON格式&#xff08;因此HTTP 200&#xff09;&#xff0c;或者返回某些异常/错误&#xff08;例如HTTP 4xx或5…

video.js android,VideoJS + HTML5自动播放失败,适用于Android 2.3+和IOS 4+

我的VideoJS和HTML5项目针对更新的Web浏览器(较新版本的FireFox和Chrome)以及移动浏览器(Android2.3 和IOS4 )。VideoJS HTML5自动播放失败&#xff0c;适用于Android 2.3和IOS 4我希望所有视频在“准备就绪”之后自动播放。我尝试了几种方法(在下面的方法中提到过)&#xff0…

EPS(Evolved Packet System,演进的分组系统)

EPS&#xff08;Evolved Packet System&#xff0c;演进的分组系统&#xff09;是3GPP标准委员会在第4代移动通信中出现的概念。可以认为EPSUE&#xff08;User Equipment&#xff0c;用户设备&#xff09;LTE&#xff08;4G接入网部分&#xff09;EPC&#xff08;Evolved Pack…

lottie android min sdk,跳一个Lottie无法回调开始播放动画事件的坑

一、背景介绍项目背景是在界面中弹出一个浮层动画&#xff0c;同时播放一个音效。二、当前实现实现思路比较简单&#xff1a;继承一个DialogFragment&#xff0c;在相关的生命周期方法onViewCreated中调用startLottieAnim进行动画播放&#xff0c;同时监听lottie动画播放的回调…

Ad-hoc

Ad-hoc这个词来源于拉丁语&#xff0c;在百度上解释为“for this purpose only”&#xff0c;在wiki上解释为“for this”&#xff0c;其中文在wiki上被解释成包含特设的、特定目的的&#xff08;地&#xff09;、即席的、临时的、将就的、专案的”这么多种含义。在wireless ne…