阅读 203

Kotlin中空安全使用

前言 

在17年Google开发者大会上,Kotlin成为成功备胎转正,成为官方指定开发语言。一年过去了,已经不少开发者已经开始使用Kotlin这一新语言。一年后的18年遇到问题网上也有很多的解决方法。

空安全

Android开发者使用Java开发时,空指针错误恐怕是最常见的cash了。Kotlin作为高级语言,笔者感受最为明显的特性莫过于空安全特性了。麻麻再也不用担心程序空指针了😂。


废话这么多,下面来看具体内容

  • 使用val代替var Kotlin在语言层面上考虑了可变与不可变。val表示只读,不可后期修改。这里的不可修改和Java类似,只是不可修改后面指向的内存地址。并不是完全的不可修改。var表示可读可写。这里建议更多的使用val,kotlin要求val时必须初始化,这样就避免了空的出现。
  • lateinit关键
    在使用过程中,很不时候在定义时候是无法进行初始化的,必须在onCreate之后才能初始化,这时候val就不适用了。var可以加上lateinit关键字,来延迟初始化。
    不过在使用时候,虽然没有提示为空可能,不需要加!!空断言。但是如果没有及时的初始化会报 UninitializedPropertyAccessException 错误。在不确定是否已经初始化时可以增加 isInitialized 判断,例如
    private lateinit var onItemClickListener:(Int)->Unit
       ...
       ...
       ...
    if(:: onItemClickListener.isInitialized)
      onItemClickListener(index)复制代码
  • ?操作符
    使用某变量时,可能会出现空,这时候可以使用?操作符来做非空判断。当为空时,则不会执行下面的操作。
    mHomeAdapter?.setOnBannerListener { slider ->
                
    }复制代码

    在adapter为空时候,如果在Java中使用则就会报空指针异常错误。在kotlin中,使用?操作符表示当adapter为空时,不执行 .setOnBannerListener 也就避免了空异常的可能。

  • ?:操作符
    在我们为某些变量赋值时,如果直接使用?操作符,为空时虽然不会出现空指针,但是仍然会返回null,变量被赋值了null,这显然不是我们所希望的。如何在为null时赋值默认值呢,?:就是用来解决这个问题的。例如:
    textview.text=data?.name复制代码

    如果这里data为空时,text就会被赋值为null,修改下代码

    textview.text=data?.name?:""复制代码

    这样如果data为空,会赋值空字符串"",你可以根据自己的需求修改对应内容。

  • ?.let
    在我们使用数据类等时,如果继续使用?操作符那代码会出现下面这样的代码
    textview1.text=data?.name1
    textview2.text=data?.name2
    textview3.text=data?.name3...复制代码

    这样的代码显然不是我们所希望的,使用操作符?.let后可以修改为

    data?.let{
             textview1.text=data.name1
             textview2.text=data.name2
             textview3.text=data.name3...
    }复制代码

总结

关于空安全还有很多需要注意的点,这里仅仅是笔者使用中的一些常用技巧,遇到其他更优的小技巧持续更新,你也可以告诉我你在使用过程中有哪些更便捷的。

原文地址:http://jokehanj.com/index.php/2018/05/20/kotlin_z_k_a_q_s_y/


文章分类
Android