Kotlin - 智能转换

Kotlin - 智能转换 首页 / Kotlin入门教程 / Kotlin - 智能转换

无涯教程在之前的教程中已经看到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

!is智能换转

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

根据以下条件进行智能转换工作:

  • val变量始终是局部属性的方面。
  • 如果val属性是私有属性或内部属性,则在声明该属性的模块中执行检查。
  • 如果在检查和使用之间未修改本地var变量,则不会在修改它的lambda中捕获该变量。

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

Java性能调优实战 -〔刘超〕

从0打造音视频直播系统 -〔李超〕

Go 并发编程实战课 -〔晁岳攀(鸟窝)〕

实用密码学 -〔范学雷〕

手把手教你玩音乐 -〔邓柯〕

手把手带你写一门编程语言 -〔宫文学〕

自动化测试高手课 -〔柳胜〕

中间件核心技术与实战 -〔丁威〕

AI绘画核心技术与实战 -〔南柯〕

好记忆不如烂笔头。留下您的足迹吧 :)