kotlinvariadic-functionsextension-function

vararg and extension function in kotlin


I am trying to write extension function in kotlin. I came almost to the end but one simple thing stopped me. Code goes like this:

fun Bundle.applyWithUserParameters(vararg functionList: () -> Unit = null): Bundle = Bundle().apply {
for (method in functionList)
    method()
FirebaseAnalyticsHelper.clientRepository.getClientData()?.clientID?.let {
    putInt(
        FirebaseAnalyticsHelper.KEY_USER_ID, it
    )
}
}

null is underlined and it says: "Null can not be a value of a non-null type Array<out () -> Unit>"

Is there any way to fix this or I am unable to use vararg at all in this case? Thanks


Solution

  • You seem to be trying to set the default value of the varargs parameter to null. This is not needed. Varargs can take 0 parameters, even without a default value.

    fun Bundle.applyWithUserParameters(vararg functionList: () -> Unit): Bundle = 
        Bundle().apply {
            for (method in functionList)
                method()
            FirebaseAnalyticsHelper.clientRepository.getClientData()?.clientID?.let {
                putInt(
                    FirebaseAnalyticsHelper.KEY_USER_ID, it
                )
           }
        }
    

    This works:

    someBundle.applyWithUserParameters()