簡體   English   中英

singleton對象可以擴展一個特征嗎?

[英]Can singleton object extend a trait?

我想從Scala對象擴展一個特征並覆蓋那些特征中的方法。 所以我懷疑這些方法將成為對象或實例方法的靜態方法,並且這是從trait擴展到Scala對象的好方法。 請幫忙

trait A{
  def show:Unit
}

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

Scala中沒有靜態方法 object確實可以擴展一個trait show這樣的Overriden方法不會成為靜態方法,而是屬於B.type單個實例 這是Scala的object定義工具提供的單例模式。

在Scala REPL中嘗試以下操作:

object B
B

它應該輸出類似的東西

res0: B.type = B$@5688722f

注意 B類型是B.type ,所以B只是一個值/實例,與靜態無關。

嗯,我認為你剛剛描述的一個常見的例子/用例是擴展App特性並覆蓋main定義。

object test extends App
{  
  override def main (args: Array[String]): Unit = {
    println("Hello, let's get started")
  }
}

一般來說,為什么不定義類本身來擴展特性呢?

如果要使用B() (而不是new B() )實例化B新實例,則執行此操作是有意義的。

trait A{
  def show:Unit
}

object B { // companion aka singleton object
  def apply(){
    ...
  }
}

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

暫無
暫無

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

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