htafoya:
例えば、機能を有する場合:
fun doSomething(action:() -> Unit) {
action.invoke()
}
私は、Javaからこれを呼び出す場合、コードはする必要があります:
doSomething(() -> {
//do something
return Unit.INSTANCE
})
私の代わりに使用してコードを見てきました
doSomething(() -> {
//do something
return null
})
それは、送信影響しないnull
のではなくUnit.INSTANCE
?ドゥKotlinはUNITインスタンスが代わりに返されることを検証することによって、より多くの事を行いますか?
ローランド:
私はほとんどの時間は本当にかどうかは重要ではないだろうと思いますnull
か、Unit.INSTANCE
使用されています。しかし、このようなaは、少なくとも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") }
あなたはこれを呼び出して戻ってくる場合はnull
、あなたが得るでしょうIllegalArgumentException
、あなたが使用している場合、コードは問題なく実行します一方、Unit.INSTANCE
。
誰もがその上で動作する場合、私はこれが良い例であるとは思わないが、それは明確に示している、と述べたことUnit
は、おそらくより良い常に使用して、それが失敗する可能性Unit.INSTANCE
にかかわらず、受信機はあなたに何をするかで、あなたが安全です関数。