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