教育行業(yè)A股IPO第一股(股票代碼 003032)

全國(guó)咨詢/投訴熱線:400-618-4000

怎樣創(chuàng)建單例和半生對(duì)象?

更新時(shí)間:2021年07月16日17時(shí)01分 來源:傳智教育 瀏覽次數(shù):

好口碑IT培訓(xùn)

在Scala中,沒有靜態(tài)方法或靜態(tài)字段,所以不能用類名直接訪問類中的方法和字段,而是創(chuàng)建類的實(shí)例對(duì)象去訪問類中的方法和字段。但是,Scala中提供了object這個(gè)關(guān)鍵字用來實(shí)現(xiàn)單例模式,使用關(guān)鍵字object創(chuàng)建的對(duì)象為單例對(duì)象。

創(chuàng)建單例對(duì)象的語(yǔ)法格式如下:

object objectName

上述語(yǔ)法格式中,關(guān)鍵字object主要用于創(chuàng)建單例對(duì)象;objectName為單例對(duì)象的名稱。

下面,創(chuàng)建一個(gè)單例對(duì)象SingletonObject,代碼如文件1所示。

文件1 Singleton.scala

   //單例對(duì)象

   object SingletonObject {

     def hello() {

       println("Hello, This is Singleton Object")

     }

   }

   object Singleton {

     def main(args: Array[String]) {

       SingletonObject.hello()  

    }

  }
上述代碼中,第2-4行代碼是創(chuàng)建了一個(gè)單例對(duì)象SingletonObject,并在該對(duì)象中定義了一個(gè)方法hello();第8-9行代碼是主方法main(),并在主方法中使用單例對(duì)象訪問自己的方法hello()。

運(yùn)行上述文件1中的代碼,效果如圖1所示。

單例對(duì)象

 圖1 單例對(duì)象的運(yùn)行結(jié)果

在Scala中,在一個(gè)源文件中有一個(gè)類和一個(gè)單例對(duì)象,若單例對(duì)象名與類名相同,則把這個(gè)單例對(duì)象稱作伴生對(duì)象(companion object);這個(gè)類則被稱為是單例對(duì)象的伴生類(companion class)。類和伴生對(duì)象之間可以相互訪問私有的方法和字段。

下面,定義一個(gè)伴生對(duì)象Dog,演示操作類中的私有方法和字段。具體代碼如文件2所示。

文件2 Dog.scala

   class Dog {

     val id = 666

     private var name = "二哈"

     def printName(): Unit ={

       //在Dog類中可以訪問伴生對(duì)象Dog的私有字段

       println(Dog.CONSTANT + name)

     }

   }

   //伴生對(duì)象

  object Dog{

    //伴生對(duì)象中的私有字段

    private var CONSTANT = "汪汪汪。。。"

    //主方法

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

      val dog = new Dog

      //訪問私有的字段name

      dog.name = "二哈666"

      dog.printName()

    }

  }

上述代碼中,第1-6行代碼是創(chuàng)建了一個(gè)類Dog,并在該類中定義了兩個(gè)字段id、name以及一個(gè)方法printName();第10-18行代碼是創(chuàng)建一個(gè)伴生對(duì)象Dog,并在該對(duì)象中定義一個(gè)字段CONSTANT,在主方法main中,創(chuàng)建Dog類的實(shí)例對(duì)象,再使用實(shí)例對(duì)象訪問類中的字段和方法。

運(yùn)行上述文件2中的代碼,效果如圖2所示。

伴生對(duì)象的創(chuàng)建運(yùn)行

圖2 伴生對(duì)象訪問類中方法和字段的運(yùn)行結(jié)果





猜你喜歡:

js如何將json字符串轉(zhuǎn)換為json對(duì)象?

Selenium和PhantomJS如何結(jié)合使用?

JsonPath基本語(yǔ)法介紹:JsonPath用法詳解

傳智教育HTML前端與移動(dòng)開發(fā)高手班

0 分享到:
和我們?cè)诰€交談!