<本文学习郭神《第三行代码》总结>

在项目开发过程中一般会写很多全局变量,这些全局变量在代码中会做很多判空保护,这样就会是代码编写很繁琐。比如

var s : Second ?= nulloverride fun onCreate(savedInstanceState: Bundle?) {    super.onCreate(savedInstanceState)    setContentView(R.layout.activity_login)    s = Second()    s ?. doHomework()    s ?. doHome()    s ?. doWork()}

当有多个全局变量时,就会写很多的判空保护。所以这里就需要对全局变量进行延迟初始化操作,使用关键字lateinit,它会告诉编译器,晚些时候对该变量进行初始化,在代码中就不用进行判空保护。

所以上述代码就可修改为:

lateinit var s : Secondoverride fun onCreate(savedInstanceState: Bundle?) {    super.onCreate(savedInstanceState)    setContentView(R.layout.activity_login)    s = Second()    s . doHomework()    s . doHome()    s . doWork()}

可以看出,当加入lateinit关键字之后,就不用了做判空保护。

需要注意的是,如果在使用了lateinit关键字之后,调用全局变量时还未对该变量进行初始化,则会报错,抛出异常UninitializedPropertyAccessExcepetion,所以当使用lateinit关键字时必须要在调用全局变量之前进行初始化操作。

在初始化操作时,为避免重复初始化,可以进行初始化判断,使用语法!::s.isInitialized进行初始化判断。

所以上述代码可以修改为:

lateinit var s : Secondoverride fun onCreate(savedInstanceState: Bundle?) {    super.onCreate(savedInstanceState)    setContentView(R.layout.activity_login)    if (!::s.isInitialized)        s = Second()    s . doHomework()    s . doHome()    s . doWork()}

更多相关文章

  1. 没有一行代码,「2020 新冠肺炎记忆」这个项目却登上了 GitHub 中
  2. Android(安卓)- 代码片段
  3. 【Android】Toast大全
  4. [置顶] Eclipse,到了说再见的时候了——Android(安卓)Studio最全
  5. Android(安卓)File.listFiles()返回null问题
  6. http上传文件到网络核心代码
  7. fanfou(饭否) android客户端 代码学习2
  8. android 设置Spinner文字标题颜色 字体大小样式
  9. Android变形(Transform)之Camera使用介绍

随机推荐

  1. Android官方入门文档
  2. Android相机开发那些坑
  3. Android(安卓)stuido常用快捷方式整理
  4. Android深入浅出之Audio第三部分Audio Po
  5. Android和设计模式:模板模式
  6. Style在Android中的继承关系
  7. Android(安卓)正移植到C#
  8. Android安全性真相:危险被杀毒软件商夸大
  9. Android中LCD背光驱动
  10. Android新手入门 FAQ