我测试了一些其他的情况,其他的运算符函数和普通函数都不受影响。当变量来自局部作用域或者函数参数也不会发生这种问题。
之前有人提过类似的问题 ,它确实只需要显式调用.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)() //正常
}
}
}