为什么没有smart-cast处理这种情况?

时间:2015-12-01 00:13:40

标签: kotlin

我有一些与此类似的结构的代码:

private fun test() : Double {
    val a : Double? = 15.0
    val b : Double? = 20.0
    return if (a == null && b == null) {
        0
    } else if (a != null && b == null) {
        a
    } else if (a == null && b != null) {
        b
    } else {
        a+b
    }
}

根据我的理解,聪明的演员应该在最后的“其他”中推断出。声明,a和b都不能为空,但它似乎并不能推断出这会导致错误。

是否有正当理由认为智能播放不会像我期望的那样工作,或者它不像我想的那样聪明?

1 个答案:

答案 0 :(得分:1)

它并不像你想象的那么聪明。

IntelliJ IDEA的问题跟踪系统中存在大量智能投射相关问题。例如https://youtrack.jetbrains.com/issue/KT-6822这是https://youtrack.jetbrains.com/issue/KT-2454的子任务,列出了其他可能相关的问题。我会仔细研究这些问题,看看你的问题是否已被跟踪,如果没有,请为此创建一个,看看它是什么。