美文网首页
kotlin中的延迟加载

kotlin中的延迟加载

作者: most_xiaoya | 来源:发表于2019-02-11 19:39 被阅读0次

    kotlin的延迟加载主要有两种:lateinit和lazy;
    一、lateinit
    在var之前添加lateinit,然后选择你想要的时候,初始化,但是有以下需要注意的地方:
    1.lateinit只能修饰变量var,不能修饰常量val;
    2.lateinit不能对可空类型使用;
    3.lateinit不能对java基本类型使用,例如:Double、Int、Long等。
    在调用lateinit修饰的变量时,如果变量还没有初始化,则会抛出未初始化异常,报错
    举个栗子🌰:

       lateinit var lateStr: String
    
        fun demo() {
            //初始化;
            lateStr = "hello ! i am  lateinit String "
        }
    

    二、lazy的使用;
    举个栗子🌰先:

    val lazyStr :String by lazy {
            Log.e("Xiaoya","开始初始化")
            "hello ! i am  lazy String"
        }
    

    使用时,在类型后面加by lazy{}即可,{}中的最后一行代码,需要返回初始化的结果,上述代码中,"hello ! i am lazy String"即为最后初始化的值。下面是lazy的一些注意点:
    1、lazy只能对常量val使用,不能修饰变量var
    2、lazy的加载时机为第一次调用常量的时候,且只会加载一次(毕竟是个常量,只能赋值一次)

    三、区别:
    上面简单了解了两种延迟加载的用法 那有什么区别呢?
    首先两者的应用场景是略有不同的。
      然后,虽然两者都可以推迟属性初始化的时间,但是lateinit var只是让编译期忽略对属性未初始化的检查,后续在哪里以及何时初始化还需要开发者自己决定。
      而by lazy真正做到了声明的同时也指定了延迟初始化时的行为,在属性被第一次被使用的时候能自动初始化。但这些功能是要为此付出一丢丢代价的。

    相关文章

      网友评论

          本文标题:kotlin中的延迟加载

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