您当前的位置: 首页 >  kotlin
  • 0浏览

    0关注

    674博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

kotlin的智能类型转换

沙漠一只雕得儿得儿 发布时间:2020-12-10 22:26:35 ,浏览量:0

kotlin里面的智能类型转换有如下两个场景:

场景一:自动推断类型并转换

首先看下示例:

        var zhangsan: Zhangsan = Person("zhangsan")
        if (zhangsan is Person) {
            println(zhangsan as Person).name
        }

用is操作符判断下zhangsan这个变量是否是Person类,如果是的话,打印出zhangsan的名字,打印时又将zhangsan强制转化成了Person,因为外面已经判断过zhangsan是Person了,kotlin可以自动在内部将zhangsan转化为Person,而不需要我们再用as操作符强制转换了,因此代码可以写成如下:

        var zhangsan: Zhangsan = Person("zhangsan")
        if (zhangsan is Person) {
            println(zhangsan.name)
        }

zhangsan类型自动转化为了Person

场景二:空类型

看如下示例:

var value: String? = null
value = "zhangsan"
if (value != null) {
    println(value.length)
}

在if时已经判断了value不为空,并且还能确定没有其他地方去修改value这个值,因此在if外面时value的类型是String?,但是在if里面则自动转化为了String类型,而不用再判空调用length,

也就是不用写成value?.length的形式。如下图所示

类型的安全转换:

先看如下示例:

val zhangsan: String = "wangwu"
println((zhangsan as Person).name)

当我们不确定是否能够将A对象转化为B类型时,可以使用as ?的安全操作符,这时zhangsan整体变成了Person?的数据类型,因此在访问Person的属性name时前面也需要添加?修改完成后的代码如下:

val zhangsan: String = "wangwu"
println((zhangsan as? Person)?.name)

 

关注
打赏
1657159701
查看更多评论
立即登录/注册

微信扫码登录

0.0394s