【问题标题】:Why Scala forces uses of Await instead of Awaitable? [duplicate]为什么 Scala 强制使用 Await 而不是 Awaitable? [复制]
【发布时间】:2019-04-02 06:14:32
【问题描述】:

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))
  }
}

【问题讨论】:

标签: scala


【解决方案1】:

因为它们无法在您自己的类中覆盖 Awaitable.ready。 他们可以将其设为private[concurrent],但您也无法调用它。他们也可以将其设为final,但是在子类中覆盖它是不可能的(其中只有一个,所以,在这种情况下这不是一个真正的问题......但是如果他们想稍后添加更多呢? )

【讨论】:

  • Awaitable.ready 是抽象方法。所以它打算被覆盖
猜你喜欢
  • 2015-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-14
  • 2013-04-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多