[英]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.