【发布时间】:2018-01-08 19:51:51
【问题描述】:
fun test() {
class Test(val foo: ((Double, Double) -> Double)?)
val test = Test(null)
if(test.foo != null) test.foo(1.0, 2.0)
}
上面的代码产生了错误:
Kotlin:引用具有可为空的类型 '((Double, Double) -> DoubleArray)?',使用显式 '?.invoke()' 进行类似函数的调用 而是。
如果我遵循错误建议并将调用更改为 test.foo?.invoke(1.0, 2.0),代码会编译,但 IntelliJ 现在会报告
对 '((Double, Double) -> DoubleArray) 类型的非空接收器进行不必要的安全调用
按照这个建议,我最终得到了 test.foo.invoke(1.0, 2.0),我认为它可以与 test.foo(1.0, 2.0) 互换;为什么这里不是这样?
当 foo 不是类成员时,一切正常:
fun test2() {
val foo: ((Double, Double) -> Double)? = null
if(foo != null) foo(1.0, 2.0)
}
【问题讨论】:
-
这看起来像一个错误。如果 kotl.in/issue 尚不存在,您可以创建一个问题。
标签: kotlin