无涯教程在之前的教程中已经看到Kotlin可空类型(Nullable)和非可空类型(Non-Nullable)是如何声明可空类型的。要使用此可为空的类型,无涯教程可以选择使用智能强制类型转换。智能强制转换是Kotlin编译器在if表达式内跟踪条件的功能。如果编译器发现变量不是可为null的类型的null,则编译器将允许访问该变量。
当无涯教程尝试在没有安全类型转换的情况下访问可为null的String类型时,它将生成编译错误。
链接:https://www.learnfk.comhttps://www.learnfk.com/kotlin/kotlin-smart-cast.html
来源:LearnFk无涯教程网
var string: String? = "Hello!" print(string.length)//编译错误
为了解决上面的表达式,无涯教程使用一个安全的强制转换为:
fun main(args: Array<String>){ 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<String>){ val obj: Any = "The variable obj is automatically cast to a String in this scope" if(obj is String) { //不需要显式转换。 println("String length is ${obj.length}") } }
输出:
String length is 64
fun main(args: Array<String>){ 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 //不需要显式转换。 println("String length is ${obj.length}") }
输出:
String length is 64
根据以下条件进行智能转换工作:
祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)