Scala學習之路 (五)Scala的關鍵字Lazy


Scala中使用關鍵字lazy來定義惰性變量,實現延遲加載(懶加載)。 
惰性變量只能是不可變變量,並且只有在調用惰性變量時,才會去實例化這個變量。

在Java中,要實現延遲加載(懶加載),需要自己手動實現。一般的做法是這樣的:

public class JavaLazyDemo {
    private String name;

    //初始化姓名為huangbo
    private String initName(){
        return "huangbo";
    }

    public String getName(){
        //如果name為空,進行初始化
        if(name == null){
            name = initName();
        }
        return  name;
    }

}

在Scala中對延遲加載這一特性提供了語法級別的支持:

lazy val name = initName()

使用lazy關鍵字修飾變量后,只有在使用該變量時,才會調用其實例化方法。也就是說在定義property=initProperty()時並不會調用initProperty()方法,只有在后面的代碼中使用變量property時才會調用initProperty()方法。

如果不使用lazy關鍵字對變量修飾,那么變量property是立即實例化的:

object ScalaLazyDemo {
  def init():String = {
    println("huangbo 666")
    return "huangbo"
  }

  def main(args: Array[String]): Unit = {
    val name = init();
    println("666")
    println(name)
  }
}

上面的property沒有使用lazy關鍵字進行修飾,所以property是立即實例化的,調用了initName()方法進行實例化。

使用Lazy進行修飾

object ScalaLazyDemo {
  def init():String = {
    println("huangbo 666")
    return "huangbo"
  }

  def main(args: Array[String]): Unit = {
    lazy val name = init();
    println("666")
    println(name)
  }
}

在聲明name時,並沒有立即調用實例化方法initName(),而是在使用name時,才會調用實例化方法,並且無論縮少次調用,實例化方法只會執行一次。

 


免責聲明!

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



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