【问题标题】:vararg and extension function in kotlinkotlin 中的可变参数和扩展函数
【发布时间】:2021-09-29 18:15:11
【问题描述】:

我正在尝试在 kotlin 中编写扩展函数。我几乎走到了尽头,但一件简单的事情阻止了我。代码如下:

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 带有下划线,它说:“Null 不能是非 null 类型的值 Array Unit>”

有没有办法解决这个问题,或者在这种情况下我根本无法使用可变参数? 谢谢

【问题讨论】:

  • 您似乎将 varargs 参数的默认值设置为 null。这没有多大意义。你为什么要这么做?
  • 因为在某些情况下我会发送 2,3,4 个函数作为参数,而在某些情况下,我会向 applyWithUserParameters 发送零个参数
  • 所以...?为什么这意味着您需要= null?一个没有默认值的 vararg 本身可以接受 0 个或多个参数。删除= null怎么样?
  • 你能把它写下来吗?它看起来怎么样?捆。 applyWithUserParameters....?
  • what 看起来如何?

标签: kotlin variadic-functions extension-function


【解决方案1】:

您似乎正在尝试将 varargs 参数的默认值设置为 null。这不是必需的。 Varargs 可以采用 0 个参数,即使没有默认值。

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

这行得通:

someBundle.applyWithUserParameters()

【讨论】:

  • 没错!当你用空括号编写它时,我不知道 vararg 即使没有默认值也需要 0 个参数。感谢您的帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-04
  • 2020-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-17
相关资源
最近更新 更多