概念分析
惰性计算:尽可能地延迟表达式求值,这是许多函数式编程语言的特点
优点:
- 可以将耗时的计算推迟到绝对需要时执行
- 可以创建无限个集合,只要他们收到请求,就会继续提供元素
区别: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 修饰的变量
