我有此Kotlin代码:
interface Course
class ProgrammingCourse : Course
class MathCourse : Course
...
fun doSomething(id: String) = getCourse(id)
.takeIf { it is ProgrammingCourse }
.apply {
//do something with the course
}
}
fun getCourse(id: String) : Course {
//fetch course
}
在
apply
函数内部,this
是Course?
类型,应该是ProgrammingCourse?
,不是吗?在这种情况下,智能投射不起作用。我猜Kotlin还不支持。我的意思是,有没有一种方法可以不使用
if/else
来完成这项工作呢? 最佳答案
我刚刚使用as?
运算符解决了,该运算符强制转换为ProgrammingCourse
或在出现错误时返回null
:
fun doSomething(id: String) = getCourse(id)
.let { it as? ProgrammingCourse }
?.apply {
//do something with the course
}
}
现在,在
apply
函数中,this
的类型为ProgrammingCourse
(由于?
,因此不可为空)