美文网首页hello world
scala中如何实现的lazy变量的懒加载

scala中如何实现的lazy变量的懒加载

作者: 过雨神 | 来源:发表于2019-08-22 22:32 被阅读0次

lazy关键字可以用来修饰不可变变量,该关键字的作用是:当对象被真正使用的时候才会被初始化。经常用于一些可能用到也可能用不到的情形,例如:创建一个Connection对象,或者自定义一个可能用到的函数。

lazy的底层编译是如何实现的?

以最简单的如下代码为例:

class Goo {

    lazy val goo = "hello"

}

用scalac进行编译之后,再用jad进行反编译,结果如下:

public class Goo {

    public static void main(String args[]) {

        Goo$.MODULE$.main(args);

    }

    private String goo$lzycompute() {

        synchronized(this) {

            if(!bitmap$0) {

                goo = "hello";

                bitmap$0 = true;

            }

        }

        return goo;

    }

    public String goo() {

        return bitmap$0 ? goo : goo$lzycompute();    

    }

    public Goo() { }

    private String goo; private volatile boolean bitmap$0;

}

从编译的角度来看,lazy的实现基本就是用一个异步方法包装的,很类似我们日常在Java中封装了一个方法,在方法中实现了对象的实例化。从而避免对象直接实例化。那么可以推测,在实际使用lazy变量goo的时候,实际使用的,是调用的goo()方法。

我们在代码中加点内容验证一下:

class Goo { lazy val goo = "hello"}

object Goo {

    def main(args: Array[String]): Unit = {

        val o = new Goo()

        print(o.goo)

    }

}

然后对Goo.scala进行编译之后,会产生Goo.class和Goo$.class。

我们对Goo$.class进行反编译,可以看到内容如下:

这样就验证了我们的猜想。

相关文章

  • Scala关键字lazy的理解和使用

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

  • scala中如何实现的lazy变量的懒加载

    lazy关键字可以用来修饰不可变变量,该关键字的作用是:当对象被真正使用的时候才会被初始化。经常用于一些可能用到也...

  • Swift3.0学习总结(三)

    懒加载: 方式为: lazy var 变量名:变量类型 = { //code return }() lazy为...

  • swift学习之懒加载

    在移动端开发过程之中,懒加载随处可见。在swift中,苹果推荐使用懒加载,如何实现懒加载呢? 关键字: lazy ...

  • Swift初识-懒加载的使用

    懒加载的写法: lazy var 变量名:变量类型 = { return 当前变量类型的值 }() lazy va...

  • Swift小结

    懒加载 格式 lazy var 变量: 类型 = { 创建变量代码 }() 以 lazy var 开头,闭包末尾跟...

  • Swift学习笔记(2)

    懒加载 基本格式lazy var 变量: 类型 = { 创建变量代码 }() 例子 懒加载的写法本质上是定义并执行...

  • Swift:)懒加载Lazy

    OC中,要实现懒加载是用到getter方法,例如 Swift懒加载差别就很大了,懒加载属性用lazy修饰,注意结尾...

  • swift学习09(懒加载)

    swift中是通过专门的关键字(lazy)来实现懒加载; 一、直接懒加载赋值 二、懒加载赋一个函数 三、懒加载赋一...

  • lazy

    swift中是通过专门的关键字(lazy)来实现懒加载; 直接懒加载赋值 懒加载赋一个函数 懒加载赋一个闭包 1、...

网友评论

    本文标题:scala中如何实现的lazy变量的懒加载

    本文链接:https://www.haomeiwen.com/subject/igcasctx.html