Kotlin笔记 空指针检查

Kotlin相较于java的一大优势就是可以减少空指针的出现,变量的type需要指定是否能为空,不带?的type不能为空

var a: String = "abc"
a = null // compilation error
var b: String? = "abc"
b = null // ok

不为空的变量可以调用方法,但是为空的变量使用前显式需要检查是否为空

val l = a.length //合法

val l = b.length // 不合法

检查是否为空

  • option1
val l = if (b != null) b.length else -1

或者

if (b != null && b.length > 0) {
    print("String of length ${b.length}")
} else {
    print("Empty string")
}
  • option2

safe call 操作符

b?.length

如果b不为空,返回 b.length,如果b为空,返回null

safe call可以和let一起使用,只对非空元素进行操作

val listWithNulls: List<String?> = listOf("A", null)
for (item in listWithNulls) {
     item?.let { println(it) } // prints A and ignores null
}

Elvis 操作符

?:如果符号左边的表达式不为空,则返回左边的表达式,否则返回右边的表达式

val l = b?.length ?: -1

如果b?.length不为空,则返回它,如果为空,返回-1

returnthrow可以放在elvis操作符的右边

fun foo(node: Node): String? {
    val parent = node.getParent() ?: return null
    val name = node.getName() ?: throw IllegalArgumentException("name expected")
    // ...
}

!!操作符

b!!,如果b不为空,则返回b,如果b为空,则throw NullPointerException。

val l = b!!.length

使用filterNotNull来过滤集合中空元素

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容