scala lazy关键字

scala lazy 加载、 模式匹配case实例

lazy 赖加载

Scala中使用关键字lazy来定义惰性变量,实现延迟加载(懒加载)。 惰性变量只能是不可变变量,并且只有在调用惰性变量时,才会去实例化这个变量。

我们看一下spark源码中的这段代码


/** Default properties present in the currently defined defaults file. */
  lazy val defaultSparkProperties: HashMap[String, String] = {
    val defaultProperties = new HashMap[String, String]()
    if (verbose) SparkSubmit.printStream.println(s"Using properties file: $propertiesFile")
    Option(propertiesFile).foreach { filename =>
      Utils.getPropertiesFromFile(filename).foreach { case (k, v) =>
        if (k.startsWith("spark.")) {
          defaultProperties(k) = v
          if (verbose) SparkSubmit.printStream.println(s"Adding default property: $k=$v")
        } else {
          SparkSubmit.printWarning(s"Ignoring non-spark config property: $k=$v")
        }
      }
    }
    defaultProperties
  } 
注意:lazy 修饰的是val变量(不可变)

实例:

class LazyTest() {

  lazy val aaa: mutable.HashMap[String, String] = {
    val value = new mutable.HashMap[String, String]()
    value.put("a", "b")
    value.put("c", "d")
    value.put("e", "f")
    value
  }

  def init: String = {
    println("aaa")
    return ""
  }

}

object LazyTest {
  def main(args: Array[String]): Unit = {
    lazy val value =  new LazyTest().init
//    val value =  new LazyTest().init
    println("bbb")
    value
  }
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章