当某个变量的值可以为 null 的时候,必须在声明处的类型后添加 ?
来标识该引用可为空。
如果 str
的内容不是数字返回 null:
fun parseInt(str: String): Int? { // …… }
is 运算符检测一个表达式是否某类型的一个实例。 如果一个不可变的局部变量或属性已经判断出为某类型,那么检测后的分支中可以直接当作该类型使用,无需显式转换:
fun getStringLength(obj: Any): Int? { if (obj is String) { // `obj` 在该条件分支内自动转换成 `String` return obj.length } // 在离开类型检测分支后,`obj` 仍然是 `Any` 类型 return null } 或者 fun getStringLength(obj: Any): Int? { if (obj !is String) return null // `obj` 在这一分支自动转换为 `String` return obj.length } 或者 fun getStringLength(obj: Any): Int? { // `obj` 在 `&&` 右边自动转换成 `String` 类型 if (obj is String && obj.length > 0) { return obj.length } return null }
使用for 循环
val items = listOf("apple", "banana", "kiwifruit") for (item in items) { println(item) }
while 循环
val items = listOf("apple", "banana", "kiwifruit") var index = 0 while (index < items.size) { println("item at $index is ${items[index]}") index++ }
when 使用
fun describe(obj: Any): String = when (obj) { 1 -> "One" "Hello" -> "Greeting" is Long -> "Long" !is String -> "Not a string" else -> "Unknown" }
使用 in 运算符来检测某个数字是否在指定区间内:
val x = 10 val y = 9 if (x in 1..y+1) { println("fits in range") }