Scala中的單例以及鏈式表示式

541732025發表於2016-03-18
object被當做單例,如果有伴生類的話,那它就是該類的伴生物件,可以作為類的公共靜態方法和成員區
實際上,每一個具體物件,都有單例型別

點選(此處)摺疊或開啟

  1. object Scala
  2. class Java1
  3. class JVM { def method1: this.type = this }
  4. class JVM_Language extends JVM { def method2 : this.type = this }
  5. object Singleton_Type {

  6.   def main(args: Array[String]){
  7.     println(Scala.getClass) //class com.dt.scala.bestpractice.Scala$
  8.     println(typeOf[Scala.type]) //com.dt.scala.bestpractice.Scala.type,最原始的單例型別
  9.    
  10.     val java = new Java1
  11.     val java2 = new Java1
  12.     println(typeOf[java.type]) //java.type,例項的type
  13.     println(typeOf[java2.type]) //java2.type
  14.    
  15.      //java是java.type單例型別的唯一例項;java2是java2.type單例型別的唯一例項
  16.      //作為一個類的例項,它是單例唯一的,雖然背後的class一樣,但是type不同
  17.      //所有物件都有一個唯一的.type的單例型別
  18.     val content:java.type = java
  19. // val content:java.type = java2
  20.     
  21.     val jvm = new JVM_Language
  22.     println(jvm.method1) //com.dt.scala.bestpractice.JVM_Language@627a4489,返回具體子類例項
  23.     jvm.method1.method2 //this.type動態返回具體例項,該例項具有method2方法
  24.   }

  25. }

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28912557/viewspace-2059614/,如需轉載,請註明出處,否則將追究法律責任。

相關文章