前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Kotlin---类型判断与强转

Kotlin---类型判断与强转

作者头像
None_Ling
发布2018-12-14 17:17:25
4.2K0
发布2018-12-14 17:17:25
举报
文章被收录于专栏:Android相关Android相关Android相关

准备工作

准备两个类PersonChild Person类如下:

 open class Person(name: String, age: Int) {
    var mName    = name
    var mAge = age

    open fun printInfo(): Int = Log.e("TAG", "$mName.....$mAge")
}

Child类如下:

class Child(name: String, age: Int, canWalk: Boolean) : Person(name, age) {
    var mCanWalk = canWalk

    override fun printInfo(): Int = Log.e("Child", "Child...$mName...$mAge...$mCanWalk")

    fun printCanWalk() = Log.e("TAG", "Child Can Walk....$mCanWalk")
}

类型判断

在java中使用instanceof来判断类型。而在Kotlin中,则是使用is来判断:

var person = Person("Bob", 30)
if (person is Child) {
     person.printCanWalk()
} else {
     person.printInfo()
}

可以看到在判断完类型后,可以直接调用该类型的函数。这部分是编译器替我们完成的,并且在条件表达式中同样可以使用

if (person is Child && person.mCanWalk) {
    person.printCanWalk()
}

类型强转

当有确定类型当时候,就可以使用as进行强制转换了:

var person = Person("Bob", 30)
var child = person as Child

但是如果在强转当时候,发现类型不匹配,则会报Exception。而如果是null类型的对象强转时,可以通过?来允许可空数据进行判断

var person : Any = Person("Bob", 30)
var child: Child? = person as? Child
child?.printCanWalk()

这样的话,当类型判断为空时,则会返回null,而在执行child?.printCanWalk()语句时,会判断child是否为空,如果为空的话,则不会执行,如果不为空的话,就会执行。

而将person标为Any,可以相当于Java中的Object,为了去除编译器的警告。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.11.22 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 准备工作
  • 类型判断
  • 类型强转
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档