栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Kotlin类型检测,类型转换

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Kotlin类型检测,类型转换

文章目录:
  • is 运算符
  • 类型自动转换
  • as 运算符
is 运算符

is 运算符类似Java中的 instanceof ,
用来检查一个对象是否属于某种类型,
其否定形式为 !is 。

open class Doge
class Corgi : Doge()    // Corgi 类 继承自 Doge类.

fun testIs(): Unit {
    val dog = Doge()
    val corgi = Corgi()
    println(dog is Doge) // true
    println(corgi is Corgi) // true

    println(corgi is Doge) // true : 子类is父类
    println(dog is Corgi) // false :父类 !is 子类
}
类型自动转换

在Kotlin中,编译器会根据 is 检查的值,在需要的时候,自动地、安全地 插入类型转换:

fun testLengthF(): Unit {
    strLength("abc")   // abc, length = 3
    strLength(2333)   // 2333, length = 4
    strLength(true)    //true, length = 1

    val corgi = Corgi() // basic.Corgi@3764951d is not a String
    strLength(corgi)  // basic.Corgi@3764951d, length = -1
}

fun strLength(x: Any): Int {
    val r = when(x) {
        is String -> x.length
        is Number -> x.toString().length
        is Char , is Boolean -> 1
        else -> {
            println("$x is not a String")
            -1
        }
    }
    println("$x, length = $r")
    return r
}
as 运算符

as 运算符 用于执行类型转换,
如果转换的类型与指定的类型兼容,那么转换就会成功进行,
如果类型不兼容,使用 as? 运算符就会返回 null .

open class Doge
class Corgi : Doge()    // Corgi 类 继承自 Doge类.

fun testAs(): Unit {
    val dog = Doge()
    val corgi = Corgi()
    println(corgi as Doge) // 子类型可以转为父类型
    println(dog as? Corgi) // 父类型不可以强制转为子类型
    println(dog as Corgi)  // 抛出异常:ClassCastException
}

         按照里氏替换原则,父类型强制转为子类型是对 面向对象编程(OOP) 的严重违反,
因为子类型除了包含父类型所有的方法和属性外,还可以有自定义的成员方法和属性,
而父类型则未必具有与子类型相同的成员,所以这种转换是不允许的。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/531323.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号