inline fun <T, R> isNullObject(value: T?, notNullBlock: (T) -> R, isNullBlock: (() -> Unit)? = null) {
if (value != null) {
notNullBlock(value)
} else {
if(isNullBlock != null){
isNullBlock()
}
}
}我试图编写一些高阶函数来促进开发,但这是错误的
最佳答案
我认为这与传递给它的 inline
functions和lambdas如何内联有关。内联修饰符会影响函数本身和传递给它的lambda:所有这些都将内联到调用站点中。看来Kotlin不允许使用可空 lambdas。
如果您想要isNullBlock
参数的一些默认值,可以使用空括号isNullBlock: () -> Unit = {}
:
inline fun <T, R> isNullObject(value: T?, notNullBlock: (T) -> R, isNullBlock: () -> Unit = {}) {
if (value != null) {
notNullBlock(value)
} else {
isNullBlock()
}
}