📅  最后修改于: 2021-01-05 07:36:58             🧑  作者: Mango
我们在之前的教程中已经看到Kotlin可空类型和非可空类型如何声明可空类型。要使用此可空类型,我们可以选择使用智能强制类型转换。智能强制转换是Kotlin编译器在if表达式内部跟踪条件的功能。如果编译器发现变量不是可为null类型的null,则编译器将允许访问该变量。
当我们尝试在没有安全类型转换的情况下访问可为null的String类型时,它将生成编译错误。
var string: String? = "Hello!"
print(string.length) // Compile error
为了解决以上表达式,我们将安全类型转换为:
fun main(args: Array){
var string: String? = "Hello!"
if(string != null) { // smart cast
print(string.length) // It works now!
}
}
输出:
6
在使用is或!is检查变量时,编译器会跟踪此信息并将变量内部转换为目标类型。如果is或!is返回true,则在范围内完成此操作。
fun main(args: Array){
val obj: Any = "The variable obj is automatically cast to a String in this scope"
if(obj is String) {
// No Explicit Casting needed.
println("String length is ${obj.length}")
}
}
输出:
String length is 64
fun main(args: Array){
val obj: Any = "The variable obj is automatically cast to a String in this scope"
if(obj !is String) {
println("obj is not string")
} else
// No Explicit Casting needed.
println("String length is ${obj.length}")
}
输出:
String length is 64
根据以下条件进行智能铸造工作: