单例对象可以扩展特征吗?

时间:2019-07-08 11:46:03

标签: scala singleton

我想从Scala对象扩展一个特征,并覆盖那些处于特征中的方法。所以我怀疑那些方法对于该对象将变为静态 或实例方法,这是从trait扩展到Scala Object的好方法。请为此提供帮助

trait A{
  def show:Unit
}

object B extends A{
  override def show(): Unit = { 
    println("inside Object")    
  }    
}

2 个答案:

答案 0 :(得分:3)

There are no static methods in Scalaobject确实可以扩展trait。像show这样的重写方法不会成为静态方法,而是属于B.type单个实例。这是Scala的object定义工具提供的单例模式。

在Scala REPL中尝试以下操作:

object B
B

它应该输出类似

res0: B.type = B$@5688722f

请注意 B的类型为B.type,因此B只是一个值/实例,与静态无关。

答案 1 :(得分:0)

嗯,我认为您刚才描述的一个常见示例/用例是扩展range特性并覆盖App定义。

main

通常,为什么不定义类本身以扩展特征?

如果要使用object test extends App { override def main (args: Array[String]): Unit = { println("Hello, let's get started") } } (而不是B)实例化B()的新实例,则这样做是有意义的。

new B()