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()
    }
}

10-06 05:48