界面Delayed需要任何
implementation of this interface [to] define a 07001 method that provides an ordering consistent with its getDelay method.
但是我想知道为什么Java 8中没有默认实现,因为contractTo要求compareTo完全依赖于getDelay.
有没有具体的理由将其留给实施班?或者在覆盖超级界面时是否无法创建默认方法?
编辑:为了使我的问题更容易理解,这是一个例子:
interface Delayed extends Comparable<Delayed> {
long getDelay(TimeUnit unit);
@Override
default int compareTo(Delayed o) {
// might not be the perfect "compareTo" implementation, but you get the point
return o == this? 0:
Long.compare(this.getDelay(TimeUnit.NANOSECONDS), o.getDelay(TimeUnit.NANOSECONDS);
}
}
解决方法:
简单的答案是,自1.5以来存在延迟,并且自1.8以来存在默认方法.因此,为了将compareTo方法作为默认方法提供,必须有意更改接口.
如果没有发生,有几个可能的原因:
>可能只是没有人考虑过它
>它可能已被考虑但被删除,因为:
>可能存在兼容性问题
>预期的好处不足以证明API变更的合理性
>在发布之前,有一些优先事项要做
对我来说,它看起来不是一个高优先级的问题.大多数情况下,您在JRE提供的ScheduledExecutorServices环境中遇到延迟实现,并且这些实现已经存在,因此不会从这样的更改中受益.
我认为您不会经常在应用程序代码中遇到自定义延迟实现,但即使您看到它不同,JRE开发人员显然也决定专注于其有用性更明显(或更少争议)的添加.
考虑到它,结合the discussion关于getDelay()合同和Comparable合同,如果Delayed从未扩展Comparable,那就更好了.毕竟,使用比较器或类似的设计模式对属性进行排序并不困难.
标签:default-method,java,java-8 来源: https://codeday.me/bug/20190829/1761820.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。