3.2运算符 in,is,as

in!in

一个值在(in)或不在(!in)一个区间或集合中。比如:3 在不在1到10的闭区间中:

println(3 in 1 .. 10) // true

再比如:3 在不在已知集合中:

val items = listOf(1, 2, 3, 4)
println(items.toString()) //[1, 2, 3, 4]
println(3 in items) //true

试一把

is

检测一个值是(is)或者不是(!is)一个特定类型的值。比如:

var a = "Hello"
if(a is String){
    println("a is String") //a is String
}else{
    println("a is not String")
}

试一把

强制类型转换 as

Kotlin中的不安全转换有中辍操作符 as 完成。

val y:String? = null
val x: String = y as String //Exception in thread "main" kotlin.TypeCastException: null cannot be cast to non-null type kotlin.String
println(x)

试一把

请注意,null 不能转换为 String 因该类型不是可空的, 即如果 y 为空,上⾯的代码会抛出一个异常。 为了匹配 Java 转换语义,我们必须在转换右边有可空类型,就像:

val y1:String? = null
val x1: String? = y1 as String?
println(x1) // null

试一把

为了避免抛出异常,可以使用 安全 转换操作符 as?,它可以在失败时返回 null:

val x: String? = y as? String

请注意,尽管事实上 as? 的右边是一个非空类型的 String,但是其转换的结果是可空的。

最后附上示例项目github


[上一篇:3.1Lambda] [返回目录] [下一篇:3.3条件表达式 if-else]