在Android项目中从Java调用Kotlin函数时,无法省略默认参数

时间:2019-08-12 14:28:26

标签: java android kotlin

我需要编写具有3个参数的函数(createSend)。 但是仅需要最后一个(callback)。为此,我使用可选参数的默认(null)值。

fun createSend(
        amount: Double? = null, currency: String? = null, callback: Callback<Send>
    ) {
}

和此处的客户端调用(Android项目中的Java代码):

TransportService.INSTANCE.createSend(12.1, "USD", new DefaultRestClientCallback<Send>() {
...}

很好,工作正常。

但是现在我想省略第一个参数(amount)。 我试试这个:

TransportService.INSTANCE.createSend( "USD", new DefaultRestClientCallback<Send>() {
...
}

现在我得到编译错误:

                TransportService.INSTANCE.createSend( "USD", new DefaultRestClientCallback<Send>() {
                                         ^
  required: Double,String,Callback<Send>
  found: String,<anonymous DefaultRestClientCallback<Send>>
  reason: actual and formal argument lists differ in length

1 个答案:

答案 0 :(得分:3)

如果要从Java代码调用该函数,则需要使用@JVMOverlads在Kotlin中对该函数进行注释,以生成Java重载。

@JVMOverloads
fun createSend(
    amount: Double? = null, currency: String? = null, callback: Callback<Send>
) {
}

但是,如果您遗漏了一个参数之后仍然有参数,则此方法将不起作用。这在Java中的正常重载中也很常见。因为不清楚您遗漏了哪些。

注意:如果您尝试像这样从Kotlin调用该函数,则可以使用命名参数来忽略不是最后一个参数。但是Java没有那个。