惰性计算(尽可能延迟表达式求值)是许多函数式编程语言的特性。惰性集合在需要时提供其元素,无需预先计算它们,这带来了一些好处。首先,您可以将耗时的计算推迟到绝对需要的时候。其次,您可以创造无限个集合,只要它们继续收到请求,就会继续提供元素。函数的惰性使用让您能够得到更高效的代码。Java 并没有为惰性提供原生支持,Scala提供了。
介绍
当函数返回值被声明为lazy时,函数的执行将被推迟,直到我们首次对此取值,该函数才会执行。这种函数我们称之为惰性函数,在Java的某些框架代码中称之为懒加载(延迟加载)。
注意事项和细节
1)lazy 不能修饰 var 类型的变量
2)不但是 在调用函数时,加了 lazy ,会导致函数的执行被推迟,我们在声明一个变量时,如果给声明了 lazy ,那么变量值得分配也会推迟。 比如 lazy val i = 10
object mylazy {
def main(args: Array[String]): Unit = {
val res = sum(10, 10)
println("-----------------")
println("res = " + res)
}
def sum(n1: Int, n2: Int): Int = {
println("执行了sum函数")
return n1 + n2
}
}
执行结果
执行了sum函数
-----------------
res = 20
在var前面加上lazy
object mylazy {
def main(args: Array[String]): Unit = {
lazy val res = sum(10, 10)
println("-----------------")
println("res = " + res)
}
def sum(n1: Int, n2: Int): Int = {
println("执行了sum函数")
return n1 + n2
}
}
执行结果
-----------------
执行了sum函数
res = 20