程序问答   发布时间:2022-05-31  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了kotlin 中最安全的启动大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决kotlin 中最安全的启动?

开发过程中遇到kotlin 中最安全的启动的问题如何解决?下面主要结合日常开发的经验,给出你关于kotlin 中最安全的启动的解决方法建议,希望对你解决kotlin 中最安全的启动有所启发或帮助;

我一直在使用它们,它们都为 NullPointerException 提供安全性,但 lateinit 会导致 UnInitializedPropetyException,那么这两个中哪个更安全。什么时候最适合lateinit,什么时候最适合lazy

我试图基于的观点

  1. 安全 //lateinit 从 NPE 中保存,但它可以抛出 UnInitializedPropetyException
  2. 优化

当一个人并不真正需要可变属性时,选择 lazy 不是更好吗?

lateinit 有什么用处?

lateinit var abc:Def 可以给 UnInitializedPropetyExceptionvar abc:Def?=null 可以给出 NPE,在这两种情况下我们都有可变性和异常。

解决方法

@H_944_46@

它们有两个不同的目的:

  1. by lazy 仅用于在某些时候在运行时访问时初始化某些内容。虑成本高/资源密集型的组件或初始化。如果此组件仅在某些情况下使用,by lazy 可以帮助避免这些代价高昂的初始化
  2. lateinit 如果您不能立即初始化某些内容,则它更像是一种方便的方法。例如。在 android 中,如果您想保存对其中一个视图的引用,则只能在 onCreateView/onViewCreated 中初始化它们。不幸的是,lateinit 仅适用于 var,因此它不会强制执行不变性,因此请谨慎使用 :)

更新: 使用 lateinit 和可空性模式都会获得可变性和不安全性,因此从这个意义上说,它们并没有太大区别

但是 lateinit 更冗长,因为您知道如果出现问题是初始化问题(或者应该是)。 可空性模式适用于更一般的问题,例如:如果您计划清除/重置组件

,

lazy 是最安全的,因为您需要先为其分配一个值,而不必担心初始状态。另外,关于资源,当第一次使用lazy对象时,它被初始化。关于性能,当你先调用 get() 然后每次调用 get() 从内存中给出结果时,结果会保存在内存中。

关于最好的情况,使用它们 late initlazy

  • late init 在不确定对象的方式时使用 初始化和可变性
  • lazy 使用以防万一,您希望类中只存在实例对象 范围和不变性
,
  • 什么时候使用哪个?

    lateinit 只能用于 var(可变)属性,而 lazy 只能用于 val(不可变)属性。 lateinit 不适用于原始类型。 在使用单例模式(Kotlin 中的对象声明)时,我们应该使用惰性,因为它会在第一次使用时被初始化。 在 lateinit 中,属性的类型必须是非空的。 lateinit 只能在属性没有自定义 getter 或 setter 时使用。 在 lateinit var 中,它取决于用户在多线程环境中正确初始化属性。通过 lazy { ... } 初始化默认是线程安全的,并确保初始化最多完成一次。

      var — Declared as mutable
      val — Read-only (immutablE)
    
      val someText: String by lazy { "Variable is lazy initialized" }
      fun doprintSomeText() {
      println("Length is  " + someText.length) // someText will be initialized here
      }
    
      lateinit var someText: String // initialize laterfun doprintSomeText() {
      someText = "Variable is lateinit" // initialize 
      println("Length is  " + someText.length)
      }
    
,

您可以在使用前检查 lateinit var 是否已初始化

lateinit var foo: Foo
if(::foo.isInitialized) {
    // foo is initialized. Go Ahead
}

当您知道 var 将需要但在类加载时不需要时,您可以使用 lateinit 声明它。这意味着您将根据需要对其进行初始化。

懒惰表示该变量将在第一次使用时进行初始化。如果您不需要使用该变量,则它根本不会初始化。

这不会以任何方式导致 NPE。

简而言之,如果我们将其声明为 lateinit,那么作为开发人员,我们完全有责任在使用前对其进行初始化

大佬总结

以上是大佬教程为你收集整理的kotlin 中最安全的启动全部内容,希望文章能够帮你解决kotlin 中最安全的启动所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:kotlin