Kotlin |
您所在的位置:网站首页 › list强制转换 › Kotlin |
准备工作
准备两个类Person与Child 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,为了去除编译器的警告。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |