我有此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函数内部,thisCourse?类型,应该是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(由于?,因此不可为空)

09-27 11:43