Kotlin编程

Kotlin笔记 空指针检查

2017-01-19  本文已影响69人  yangweigbh

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 // 不合法

检查是否为空

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")
}

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来过滤集合中空元素

上一篇 下一篇

猜你喜欢

热点阅读