Scala單例對象、伴生對象實戰詳解


1、Scala單例對象 
Scala單例對象是十分重要的,沒有像在Java一樣,有靜態類、靜態成員、靜態方法,但是Scala提供了object對象,這個object對象類似於Java的靜態類,它的成員、它的方法都默認是靜態的。

 

//如果object的靜態成員要被外界訪問,則該成員不能被private修飾

object University{

  private var studentNo = 0

  def newStudentNo = { studentNo += 1 studentNo }

}

object objecOps { def main (args : Array[String]) : Unit = {

  println(University.newStudentNo) println(University.newStudentNo) }

}

2、Scala伴生對象 
如果有同樣一個類與該object名字一樣,則稱該object為該類的伴生對象,相對應,該類為object的伴生類。如果一個類有它的伴生對象,這個類就可通過object的名字訪問到所有成員,但object不在該類的作用范圍。

class University{ val id = University.newStudentNo private var number = 0 def aClass (number : Int){this.number += number} } object University { private var studentNo = 0 def newStudentNo = { studentNo += 1 studentNo } }

object對象為靜態常量、靜態變量區域,可以直接調用,共享全局變量很有意義,伴生對象方便類的構建,可做為當前類的靜態方法、成員的集合。 

  • 伴生對象與伴生類在Scala的面向對象編程方法中占據極其重要的位置,例如Scala中許多工具方法都是由伴 生對象提供的。
  • 伴生對象與伴生類

 

 

伴生對象首先是一個單例對象,單例對象用關鍵字object定義。在Scala中,單例對象分為兩種,一種是並未自動關聯到特定類上的單例對象,稱為獨立對象 
(Standalone Object);另一種是關聯到一個類上的單例對象,該單例對象與該類共有相同名字,則這種單例對象稱為伴生對象(Companion 
Object),對應類稱為伴生類。

 

 

 

 

 

這是一個典型的伴生類和伴生對象的例子,注意以下說明:

    • 伴生類Person的構造函數定義為private,雖然這不是必須的,卻可以有效防止外部實例化Person類,使得Person類只能供對應伴生對象使用;
    • 每個類都可以有伴生對象,伴生類與伴生對象寫在同一個文件中;
    • 在伴生類中,可以訪問伴生對象的private字段Person.uniqueSkill;
    • 而在伴生對象中,也可以訪問伴生類的private方法 
      Person.getUniqueSkill();
    • 最后,在外部不用實例化,直接通過伴生對象訪問Person.printUniqueSkill()方法


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM