Seb*_*n S 3 java java-8 default-method
延迟接口需要任何接口
此接口的实现[to]定义一个compareTo方法,该方法提供与其getDelay方法一致的排序.
但是我想知道,为什么Java 8中没有默认实现,因为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);
}
}
Run Code Online (Sandbox Code Playgroud)
简单的答案是Delayed从1.5开始default存在,并且自1.8以来存在方法.因此,为了提供compareTo方法作为default方法,必须有意地改变界面.
如果没有发生,有几个可能的原因:
它可能已被考虑但被删除,因为:
对我来说,它看起来不是一个高优先级的问题.大多数情况下,您在JRE提供Delayed的上下文中遇到实现,ScheduledExecutorService并且这些实现已经存在,因此不会从这样的更改中受益.
我认为您不会Delayed经常在应用程序代码中遇到自定义实现,但即使您看到它不同,JRE开发人员显然也决定专注于其有用性更明显(或更少争议)的添加.
考虑到它,将合同的讨论与getDelay()合同相结合Comparable,如果Delayed从来没有延伸过,那就更好Comparable了.毕竟,使用Comparator或类似的设计模式对属性进行排序并不困难.
| 归档时间: |
|
| 查看次数: |
198 次 |
| 最近记录: |