簡體   English   中英

上型綁定相對於子類型化的優勢

[英]Advantage of Upper Type Bound over Subtyping

在此示例中,使用上限類型而不是僅類型有什么好處?

為什么人們喜歡這個

trait Pages[T <: Page] {
  val pages: Seq[T]
  def find(id: String): Option[T] = pages.find(_.id == id)
  def all: Seq[T] = pages
}

在此:

trait Pages {
  val pages: Seq[Page]
  def find(id: String): Option[Page] = pages.find(_.id == id)
  def all: Seq[Page] = pages
}

這與第二個示例相比的優勢相同

trait Pages {
  val pages: Seq[Any]
  def find(id: String): Option[Any] = pages.find(_.id == id)
  def all: Seq[Any] = pages
}

:更精確的類型,允許您不要混合使用Page不同子類型,而無需進行鑄造等即可訪問MyPage操作。

另外,如果您有第一個而又需要第二個,則只需使用Pages[Page] 如果您擁有第二個並且需要第一個,那么您就不走運了。

好的,我發現在第一種情況下,我可以顯式指定類型。 如果MyPagePage子類型。

val pages = new Pages[MyPage]{
  override val pages: Seq[MyPage] = List(MyPage("a"), MyPage("b"))
}

並且編譯器可以推斷類型,以便pages.find("a")將成為MyPage類型。 在第二個示例中,類型始終為Page ,強制將其強制轉換。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM