前言
在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/