繁体   English   中英

为什么scala.util.Failure具有类型参数?

[英]Why does scala.util.Failure have a type parameter?

scala.util.Failure的声明如下:

final case class Failure[+T](exception: Throwable) extends Try[T]`

它需要一个类型参数T给出如何看起来完全没有必要的, Failure也很容易被宣布为一个子类的Try[Nothing]

final case class Failure(exception: Throwable) extends Try[Nothing]`

就像声明None一样:

object None extends Option[Nothing]

实际上,额外的类型参数成为其他地方的痛点。 这是Future.zip

def zip[U](that: Future[U]): Future[(T, U)] = {
  implicit val ec = internalExecutor
  val p = Promise[(T, U)]()
  onComplete {
    case f: Failure[_] => p complete f.asInstanceOf[Failure[(T, U)]]
    case Success(s) => that onComplete { c => p.complete(c map { s2 => (s, s2) }) }
  }
  p.future
}

该行:

    case f: Failure[_] => p complete f.asInstanceOf[Failure[(T, U)]]

可以简化为:

    case f: Failure => p complete f

如果已声明失败, Try[Nothing]的子类型。

我觉得我一定在这里缺少什么。 我可以为type参数想出的唯一原因是声明一个表达式表示无法计算特定类型,并且明确表示它是一个失败,这与仅使用Try[T] ,但是我无法想象确实需要这样做的情况。

尝试从故障中recover[U >: T](rescueException: PartialFunction[Throwable, U]): Try[U]时, T in Failure[+T]会派上用场recover[U >: T](rescueException: PartialFunction[Throwable, U]): Try[U]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM