Я думаю, что в большинстве случаев не имеет значения, используется ли null
или Unit.INSTANCE
. Однако, поскольку есть хотя бы один случай, когда такой 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
.
* 1015 С учетом вышесказанного, я не верю, что это хороший пример, но он ясно показывает, что если кто-то оперирует с этим
Unit
, то он может потерпеть неудачу, поэтому вам, вероятно, лучше всегда использовать
Unit.INSTANCE
и вы в безопасности, независимо от того, о том, что приемник делает с вашей функцией.