Kotlin教程:使用is来智能转换

2020-04-2121:45:26编程语言入门到精通Comments1,727 views字数 1049阅读模式

Kotlin可空和非可空类型如何声明。 要使用可空类型,可以选择使用智能强制转换。 智能转换是Kotlin编译器跟踪if表达式内部条件的功能。 如果编译器发现变量可null类型的null值,则编译器将允许访问此变量。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18276.html

示例文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18276.html

当尝试在没有安全转换的情况下访问可空类型的String时,它将生成编译错误。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18276.html

var string: String? = "Hello!"  
print(string.length) // Compile error
Kotlin

要解决上述表达式,使用安全转换为:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18276.html

fun main(args: Array<String>){  
    var string: String? = "Hello!"  
    if(string != null) { // smart cast  
        print(string.length) // It works now!  
    }  
}
Kotlin

执行上面示例代码,得到以下结果 -文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18276.html

6
Shell

当使用is!is来检查变量时,编译器会跟踪此信息并在内部将变量转换为目标类型。 如果is!is返回true,则在范围内完成。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18276.html

使用is来智能转换

fun main(args: Array<String>){  
    val obj: Any = "变量obj自动转换为此范围内的String"  
    if(obj is String) {  
        // No Explicit Casting needed.  
        println("字符串的长度是:${obj.length}")  
    }  
}
Kotlin

执行上面示例代码,得到以下结果 -文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18276.html

字符串的长度是:21
Shell

使用!is来智能转换

fun main(args: Array<String>){
    val obj: Any = "变量obj自动转换为此范围内的String"
    if(obj is String) {
        // No Explicit Casting needed.
        println("obj不是字符串")
    }else{
        println("字符串的长度是:${obj.length}")
    }
}
Kotlin

执行上面示例代码,得到以下结果 -文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18276.html

字符串的长度是:21
Shell

智能转换工作根据以下条件来执行:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18276.html

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

//原文出自【易百教程】,商业转载请联系作者获得授权,非商业转载请保留原文链接:https://www.yiibai.com/kotlin/kotlin-smart-cast.html#article-start文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18276.html

文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/18276.html
  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/ymba/18276.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定