簡體   English   中英

伴生對象可以擴展一些與伴生類不同的特征嗎?

[英]Can companion object extend some trait different from companion class?

我總是像它們應該的那樣使用伴隨對象:有一些類或特征,我在同一個文件中定義了具有相同類名的對象。 但我目前正在嘗試找出一些很少有伴生對象共享的常見功能,並想知道擁有這樣的東西是否安全:

trait Label {
  def label: String
}

trait InstancesMap[T <: Label] {
  private var instances = Map.empty[String, T]
  def init(instance: T): T = {
    instances += (instance.label -> instance)
    instance
  }
  def byLabel(label: String): T = instances(label)
}

case class EventStatus(label: String) extends Label

object EventStatus extends InstancesMap[EventStatus] {
  val DRAFT = init(EventStatus("draft"))
  val PUBLISHED = init(EventStatus("published"))
}

我不確定案例類伴侶對象擴展其他一些特征是否安全。 它編譯並運行良好,但很高興聽到一些意見。

當然可以,就像非伴隨object 這實際上是將“靜態”表示為伴隨對象的主要優勢之一。 擴展一個類而不是一個 trait 也有效。

您可以在標准庫中看到它,其中集合伴隨對象擴展了GenericCompanion及其各種子類型。

暫無
暫無

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

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