簡體   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