我有这个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
?
答案 0 :(得分:2)
我刚刚使用as?
运算符解决了,该运算符强制转换为ProgrammingCourse
或在发生错误时返回null
fun doSomething(id: String) = getCourse(id)
.let { it as? ProgrammingCourse }
?.apply {
//do something with the course
}
}
现在,在apply
函数中,this
类型为ProgrammingCourse
(由于?
,不可为空)