hta*_*oya 4 java null lambda kotlin
当有一个函数时,例如:
fun doSomething(action:() -> Unit) {
action.invoke()
}
Run Code Online (Sandbox Code Playgroud)
如果我从 Java 调用它,代码需要是:
doSomething(() -> {
//do something
return Unit.INSTANCE
})
Run Code Online (Sandbox Code Playgroud)
我已经看到代码而不是使用
doSomething(() -> {
//do something
return null
})
Run Code Online (Sandbox Code Playgroud)
它会影响发送null
而不是Unit.INSTANCE
吗?Kotlin 是否通过验证返回的 UNIT 实例来执行更多操作?
我认为在大多数情况下,是否使用null
或Unit.INSTANCE
是否使用都无关紧要。但是,由于至少有 1 种情况null
不希望这样,因此您可能应该始终使用它Unit.INSTANCE
。
一个不返回Unit.INSTANCE
会导致问题的虚构示例如下:
fun doSomething(action:() -> Unit) {
action.invoke() logReturnTime("after action invocation")
}
infix fun Unit.logReturnTime(msg : String) { TODO("logging return time $msg") }
Run Code Online (Sandbox Code Playgroud)
如果您调用它并返回,null
您将得到一个IllegalArgumentException
,而如果您使用Unit.INSTANCE
.
话虽如此,我不相信这是一个很好的例子,但它清楚地表明,如果有人对此进行操作Unit
,那么它可能会失败,所以你最好总是使用Unit.INSTANCE
并且你是安全的,无论接收器如何处理你的功能。
归档时间: |
|
查看次数: |
367 次 |
最近记录: |