scala - 伴生对象可以扩展一些与伴生类不同的特征吗?

标签 scala

我总是按照应有的方式使用伴生对象:具有某些类或特征,我在同一文件中定义了具有相同类名的对象。 但我目前正在尝试提取一些很少有伴生对象共享的常见功能,并想知道拥有这样的东西是否安全:

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"))
}

我不确定案例类伴生对象扩展某些其他特征是否安全。它编译并运行良好,但很高兴听到一些意见。

最佳答案

当然可以,就像非伴生对象一样。这实际上是将“静态”表示为伴随对象的主要优点之一。扩展类而不是特征也是有效的。

您可以在集合伴生对象扩展的标准库中看到它 GenericCompanion及其各种亚型。

关于scala - 伴生对象可以扩展一些与伴生类不同的特征吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48987963/

相关文章:

scala - Spark JDBC to DashDB (DB2) 与 CLOB 错误

scala - 如何在 Scala 2.11 中找到封闭源文件的名称

angularjs - 如何在 Zeppelin 的 javascript 中将变量放入 z ZeppelinContext 中?

scala - 基于类的类型参数使用 Poly1 在方法中映射 HList

scala - 如何在 Scala 中向 Map 添加可选条目?

java - 如何在 Java 中实例化和填充 Scala Stream?

scala - vespa.ai 的 SBT 依赖性解析失败

scala - 为什么 Scala 很少用于桌面应用程序?

scala - map 上的 NoSuchMethodError(Spark Scala 类)

scala - PlayFramework:如何注入(inject)数据库对象