概念分析
惰性计算:尽可能地延迟表达式求值,这是许多函数式编程语言的特点
优点:
- 可以将耗时的计算推迟到绝对需要时执行
- 可以创建无限个集合,只要他们收到请求,就会继续提供元素
区别:Java 没有为惰性提供原生支持,Scala 提供了原生支持
实例代码
Java
Scala 中惰性函数的概念在 Java 中称之为懒加载(延迟加载)
// 单例模式:懒汉式
class Singleton {
private Singleton() {}
private static Singleton single = null;
public static Singleton getInstance() {
if (single == null) {
synchronized (LazyFunction.class) {
if (single == null) {
single = new Singleton();
}
}
}
return single;
}
}
Scala
惰性函数:有一个函数,当它的返回值被声明为 lazy 时,函数的执行将被推迟,只有在首次取值时,该函数才会执行
object LazyFunction {
def main(args: Array[String]): Unit = {
lazy val res = getSum(2, 3)
println("-----")
println(s"res=${res}")
}
def getSum(n1: Int, n2: Int): Int = {
println("getSum函数执行了...")
return n1 + n2
}
}
📡 执行结果
-----
getSum函数执行了...
res=5
📝 注意事项
- 如果一个变量被声明为 lazy 时,变量值的分配会被推迟,如:
lazy val age = 10
- lazy 不能修饰 var 修饰的变量