なぜ私はNULL、Javaから呼び出され、そしてない空kotlin機能、でUnit.INSTANCEを返さなければならないのですか?

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にかかわらず、受信機はあなたに何をするかで、あなたが安全です関数。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=4961&siteId=1