我怎样才能在 Scala 中的单例对象中执行超类的代码体



我认为下面的代码最能描述我的问题:

import scala.collection.mutable.Set
case class CrazyClass(i: Int) {
  override def toString: String = s"CrazyClass[ i=$i ]"
  CrazyClass.registeredClasses += this
}
object CrazyClass extends App{
  val registeredClasses = Set[CrazyClass]()
  CrazyClass(1); CrazyClass(2)
  registeredClasses.foreach(println(_))
}

这将按预期打印:

    CrazyClass[ i=2 ]
    CrazyClass[ i=1 ]

但是如果我尝试使用从CrazyClass扩展的对象执行此操作,该对象不会自动注册:

object CrazyExtendedObject extends CrazyClass(4) {
  def something = 2
}

添加代码的输出仍然与上面的输出相同。如果我添加一个普通的扩展类,如下所示,则一切正常:

class CrazyExtendedClass(i: Int) extends CrazyClass(i)

新类的每个实例都将被注册。

那么如何在对象上实现相同的结果呢?

只需从您的App中引用CrazyExtendedClass即可。

单例是延迟加载的,因此初始值设定项在您请求之前不会运行。

最新更新