类属性的Smart Cast在使用()时存在问题


#1

我测试了一些其他的情况,其他的运算符函数和普通函数都不受影响。当变量来自局部作用域或者函数参数也不会发生这种问题。
之前有人提过类似的问题 ,它确实只需要显式调用.invoke或者进行显式类型转换就能解决,但依然很奇怪。

class B {
    operator fun invoke() {
        println("B invoke")
    }
}
class A(val c:Any) {
    fun a() {
        if(c is B){
            c.invoke()    //正常
            c()               //报错 类型不匹配
            (c as B)()    //正常
        }
    }
    fun a2(d:Any){
        if(d is B){
            d.invoke()   //正常
            d()              //正常
            (d as B)()   //正常
        }
    }
}

#2

这应该是编译器bug吧。等等看新编译器有没有这个问题


京ICP备16022265号-2 Kotlin China 2017 - 2018