当前位置: 首页 > 知识库问答 >
问题:

科特林最安全启动[副本]

翟宾实
2023-03-14

我想说明的一点是

  1. 安全//lateinit从NPE保存,但它可以抛出uninitializedPropetyException
  2. 最优性

当不需要可变属性时,选择lazy不是更好吗?

共有1个答案

公羊英达
2023-03-14

它们有两个不同的目的:

  1. by lazy只用于在运行时访问某物时初始化该物。考虑成本高/资源密集的组件或初始化。如果该组件仅在某些情况下使用,那么by lazy可以帮助避免这些代价高昂的初始化
  2. lateInit是一种更方便的方法,如果您不能立即初始化某些内容。为了前任。在android中,如果您想保存对某个视图的引用,只能在oncreateview/onviewcreated中初始化它们。不幸的是lateinit只与var一起工作,因此它不能强制不变,所以使用时要小心:)

Update:使用lateinit和nullability模式都可以获得可变性和不安全性,所以从这个意义上说,它们并没有太大的不同。

 类似资料:
  • 如何在使用Kotlin的Spring Boot中正确初始化ConfigurationProperties? 目前我喜欢下面的例子: 但是它看起来很丑陋,实际上不是一个iable,foo是常量ue,应该在启动期间初始化,将来不会改变。

  • 我读过使用“!!”而不是“?。“在kotlin中不推荐。检查变量中的null时,2有什么区别?

  • 我正在维护一个用静态编程语言和Spring Boot编写的微服务系统,在一些代码中,我发现!!语法,我不知道它的意思: 状态是上述函数的响应。有人可以向我解释一下吗!意思是,它在这种情况下有什么用?提前致谢!!!

  • 问题内容: 我正在学习具有C ++和Java背景的Kotlin。我期待下面的打印,不。我知道这对应到。默认实现不比较每个成员,即和吗?如果是这样,它会不会看到字符串值相等(因为再次映射到字符串值)?显然,我在Kotlin中还没有涉及平等与身份相关的问题。 问题答案: 您描述的默认实现仅适用于数据类。不适用于从中继承实现的常规类,只需使对象与自身相等即可。

  • 这是正确的吗? 我可以找到一个相关的问题,但它是有参数的,我不能在没有params的情况下转换它。

  • 在下面的代码中。我在Intellij idea编译器中发现val a和val b默认为"val a: StringBuilder" 这两者的区别是什么?和