前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Kotlin —  lateinit vs lazy

Kotlin —  lateinit vs lazy

作者头像
code_horse
发布2018-07-02 14:08:58
6430
发布2018-07-02 14:08:58
举报
文章被收录于专栏:Android NoteAndroid Note
Kotlin属性初始化

如果不想在一开始就初始化一个属性,那么你可以使用下面两个关键字。 ① lateinit ② lazy

lateinit

lateinit的意思是后面再初始化。

通常情况下,声明为非null类型的属性必须先初始化。但是,这在有些时候不是很方便。

要处理这种情况,可以使用lateinit修饰符修饰属性。

例如:

代码语言:javascript
复制
public class Main{
    lateinit var user:User
    
    fun init(){
        user=User()
    }

    fun do(){
      user.eat()
    }
    
}

a、lateinit只能用于var声明的类变量,并且属性没有自定义getter或setter方法。 b、属性的类型必须是非空的,并且不能是原始类型。

lazy

lazy的意思是惰性初始化。

lazy()是一个函数,它接受一个lambda并返回一个lazy实例,它可以作为一个实现lazy属性的委托:get()的第一个调用执行传递给lazy()的lambda并记录结果,随后调用get()只返回记录的结果。

例如:

代码语言:javascript
复制
public class User{
  val name:String by lazy {"Android Coder"}
}

因此第一次调用和之后调用,name都会返回“Android Coder

咱们该如何去选择使用它们呢? ① lateinit var 可以从任何你能看到对象的地方初始化。如果你想你的属性从外部被初始化,这时候可以使用lateinit。 ② lazy只能用于val属性,而lateinit只能应用于变量。因为它不能应用于final(val)字段,因此不能保证不可变性。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.01.02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Kotlin属性初始化
  • lateinit
  • lazy
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档