写过几个星期的 Kotlin 代码了,再也不用 findViewById 了,使用起来稍微简洁一点。今天小结一下,基础用法就不多说了,直接写几点我感触较深的。
空安全
当使用Java开发的时候,我们的代码大多是防御性的。如果我们不想遇到 NullPointerException,我们就需要在使用它之前不停地去判断它是否为 null。Kotlin,则是空安全的,我们可以通过一个安全调用操作符 (写做 ? )来明确地指定一个对象是否能为空。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16// 这里不能通过编译. Artist 不能是 null
var notNullArtist: Artist = null
// Artist 可以是 null
var artist: Artist? = null
// 无法编译, artist可能是 null,我们需要进行处理
artist.print()
// 只要在artist != null时才会打印
artist?.print()
// 智能转换. 如果我们在之前进行了空检查,则不需要使用安全调用操作符调用
if (artist != null) {
artist.print()
}
// 只有在确保 artist 不是 null 的情况下才能这么调用,否则它会抛出异常
artist!!.print()
// 使用 Elvis操作符 来给定一个在是 null 的情况下的替代值
val name = artist?.name ?: "empty"
关于 Elvis操作符 其实是三目条件运算符的简略写法。可以这样理解:
- A ?: B 等价于 if(A == null) B
- A?.B ?: C 等价于 if(A != null) A.B else C