当前位置: 首页 > news >正文

信誉好的扬中网站建设商旅平台app下载

信誉好的扬中网站建设,商旅平台app下载,做全网营销型网站建设,公司备案查询网站备案Kotlin 中的属性是使用var或val关键字声明的。Late init 和 lazy 都是用来初始化以后要用到的属性。 由于这两个关键字都用于声明稍后将要使用的属性,因此让我们看一下它们以及它们的区别。 Late Init 在下面的示例中,我们有一个变量 myClass&#xff0…

Kotlin 中的属性是使用var或val关键字声明的。Late init 和 lazy 都是用来初始化以后要用到的属性。
由于这两个关键字都用于声明稍后将要使用的属性,因此让我们看一下它们以及它们的区别。

Late Init
在下面的示例中,我们有一个变量 myClass,该变量首先使用 lateinit 进行初始化,然后稍后为其赋值。使用 isInitialized方法,我们能够判断该变量是否已初始化。

fun main() {MySchool().initializeClass()
}class MySchool {lateinit var myClass: Stringfun initializeClass() {println("Has my class started? " + this::myClass.isInitialized)myClass = "Science"println("Has my class started? " + this::myClass.isInitialized)}
}

当我们运行代码块时,输出将如下所示:

我们可以在第一行打印中看到,变量虽然已声明,但尚未初始化,因此返回 false。为变量赋值后,它返回 true。
在这里插入图片描述
Lazy
lazy 关键字初始化一个对象,只有在访问它时才会创建该对象。

在下面的示例中,我们将延迟初始化 myPoem 变量。我们可以看到这个变量只有在调用的时候才被创建,第二次调用的时候使用的是和之前一样的引用。

fun main() {var poem = MyPoem();println(poem.poemTitle);println("My Second Poem is Polly the sheep--"+poem.poemTitle);
}class MyPoem {val poemTitle: String by lazy {println("Billy The Goat")"Verse One"}
}

当我们运行代码块时,输出将如下所示:
在这里插入图片描述

lateinit 和 lazy 的区别:

  1. lateinit 属性不能为 nullable,但 lazy 属性可以为 nullable。
//'lateinit' modifier is not allowed on properties of nullable types-compilation error
lateinit var myClass: String?
// no compilation error
val poemTitle: String? by lazy {println("Billy The Goat")"Verse One"
}
  1. Lateinit用于声明可变变量,即使用关键字var,而lazy用于声明不可变变量,使用关键字val。

  2. Late init不能用于声明原始数据类型,如Int,而lazy可以用于声明原始数据类型。

    //'lateinit' modifier is not allowed on properties of primitive type-compilation error
    private lateinit var myAge : Int
    
    //no compilation error
    val myAge by lazy {100
    }
    
  3. 延迟初始化是线程安全的,而lateinit没有定义线程安全。

另一篇文章的总结

Lateinit 和 Lazy 有什么区别?

  1. 修饰符“lateinit”仅限于可变(var)变量属性,而修饰符“ lazy”专门用于只读(val)属性。

  2. 标记为“lateinit”的属性可以在运行时根据需要多次赋值,而标记为“lazy”的属性只能在第一次使用时赋值一次。

  3. 不可能将原始数据类型声明为“lateinit”属性,而“惰性”属性可以是原始数据类型或非原始数据类型。(比如 Int)

  4. 虽然无法确保“lateinit”属性的线程安全,但对于“惰性”属性,我们可以选择同步选项,例如 SYNCHRONIZED、PUBLICATION 或 NONE。(这就是我们在使用 Singleton 设计模式时使用 lazy 的原因。)

  5. 与不能声明为 nullable 的“lateinit”属性不同,“lazy”属性可以定义为 nullable 或 non-nullable。

  6. 虽然“lateinit”属性不能有自定义的 getter,但“惰性”属性包含一个代码块,该代码块在第一次调用该属性时运行。

  7. 在初始化之前尝试访问“lateinit”属性会导致指定未初始化属性的明显异常。另一方面,“惰性”属性在初始化之前无法访问。重要的是要注意,“惰性”属性可以为 null,但它仍会在第一次访问该属性时被初始化。

lazy in Kotlin is useful in a scenario when we want to create an object inside a class, but that object creation is expensive and that might lead to a delay in the creation of the object that is dependent on that expensive object. So, we need to understand that the object will get initialized only when it is accessed for the first time, else it will not get initialized.

文章出处:

  1. https://medium.com/huawei-developers/kotlin-lateinit-vs-by-lazy-initialization-example-tutorial-c19d84216480

  2. https://medium.com/@wambuinjumbi/differences-between-lateinit-and-lazy-a8164330b93f

http://www.yidumall.com/news/64749.html

相关文章:

  • 量身定制seo网站推广免费
  • 上海个人做网站引擎搜索下载
  • 郑州网站服务外包公司国通快速建站
  • 微信推广图片seo免费自学的网站
  • 仿做购物网站可以发布推广引流的悬赏平台
  • 后台网站模板 html百度站长工具seo查询
  • 做网站界面设计注意什么搜索优化的培训免费咨询
  • 网络规划设计师考点分析与真题详解 pdf下载长沙网站包年优化
  • 企业网站开发哪个好薇十大网络推广公司排名
  • 做纯净系统的网站重庆网站seo好不好
  • 网站开场flash怎么做的整站排名优化品牌
  • 访问网站人多的时候很慢是服务器问题还是带宽搜索引擎优化seo论文
  • wordpress多页面传变量兰州正规seo整站优化
  • 限时抢购网站源码百度平台商家联系方式
  • 建设邮费自己的网站 要不要购买服务器的游戏推广员骗局
  • 自己做视频网站有点卡电商的运营模式有几种
  • 安徽区块链虚拟币网站开发价格北京网络seo经理
  • 做网站需要的导航百度pc端首页
  • 深度网营销型网站建设培训心得体会万能模板
  • 淄博手机网站建设报价最近的头条新闻
  • 网站建设app哪个好用谷歌浏览器下载
  • 网站开发工程师职位概要网站排名seo
  • 中华人民共和国建设部网站seo需要懂代码吗
  • 做网站用什么插件贴吧推广400一个月
  • 打开浏览器自动弹出2345网址导航谷歌seo服务商
  • wikidot怎么建设网站百度图片查找
  • 关于电器网站建设的法律在线推广企业网站的方法有哪些
  • 奉贤做网站的广点通和腾讯朋友圈广告区别
  • wordpress 插件配置文件网站优化内容
  • 网站推广规范系列推广软文范例