Awaitable
trait要求使用CanAwait
隐式变量,该隐式变量不能在concurrent软件包之外使用。因此,从技术上讲,您不允许直接调用Awaitable
方法,而应使用Await
对象。
我想了解为什么做出这样的设计决定。
trait Awaitable[+T] {
def ready(atMost: Duration)(implicit permit: CanAwait): this.type
}
package concurrent {
sealed trait CanAwait
private[concurrent] object AwaitPermission extends CanAwait
object Await {
def ready[T](awaitable: Awaitable[T], atMost: Duration): awaitable.type =
blocking(awaitable.ready(atMost)(AwaitPermission))
}
}
答案 0 :(得分:0)
因为它们不是您能够在自己的类中覆盖Awaitable.ready
的东西。
他们可以将其设置为private[concurrent]
,但是您也将无法对其进行调用。他们也可以将其设置为final
,但是不可能在子类中覆盖它(其中只有一个,因此,在这种情况下这并不是真正的问题……但是,如果他们想添加更多内容,该怎么办?以后吗?)