Scala关键字lazy的理解和使用

  • 时间:
  • 浏览:0
  • 来源:5分11选5APP下载_5分11选5APP官方

因为分析不使用lazy关键字对变量修饰,非要变量property是立即实例化的:

借鉴崔鹏飞的小结

Scala同样使用了Java中常用的懒加载的办法自动帮助朋友 实现了延迟加载,有时候 还加锁正确处理多个守护线程一起调用初始化办法因为分析因为的不一致问題报告 。

对于原先另另2个表达式: lazy val t:T = expr 无论expr是有哪些东西,字面量也好,办法调用也好。Scala的编译器都不把你这名expr包在另另2个办法中,有时候 生成另另2个flag来决定只在t第一次被访问时才调用该办法。

使用lazy关键字修饰变量后,非要在使用该变量时,才会调用着实例化办法。也很多很多 说在定义property=initProperty()时不要会调用initProperty()办法,非要在底下的代码中使用变量property时才会调用initProperty()办法。

在声明property时,并非要立即调用实例化办法intit(),很多很多 在使用property时,才会调用实例化办法,有时候 无论缩少次调用,实例化办法只会执行一次。

在Java中,要实现延迟加载(懒加载),前要本人手动实现。一般的做法是原先的:

Scala中使用关键字lazy来定义惰性变量,实现延迟加载(懒加载)。

惰性变量非要是不可变变量,有时候 非要在调用惰性变量时,才会去实例化你这名变量。

观察输出:

而在Scala中对延迟加载你这名型态提供了语法级别的支持:

底下的property非要使用lazy关键字进行修饰,很多很多property是立即实例化的,因为分析观察守护线程的输出:

比如常用的单例模式懒汉式实现时就使用了底下例如 的思路实现。

能非要发现,property声明时,立即进行实例化,调用了init()`实例化办法

本文的编写借鉴了剥开Scala的糖衣(5) -- Lazy

而因为分析使用lazy关键字进行修饰:

与Java相比起来,实现懒加载着实比较方便了。非要Scala是怎么还都可以实现你这名语法糖的呢?反编译看下Scala生成的class: