我需要编写具有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
答案 0 :(得分:3)
如果要从Java代码调用该函数,则需要使用@JVMOverlads
在Kotlin中对该函数进行注释,以生成Java重载。
@JVMOverloads
fun createSend(
amount: Double? = null, currency: String? = null, callback: Callback<Send>
) {
}
但是,如果您遗漏了一个参数之后仍然有参数,则此方法将不起作用。这在Java中的正常重载中也很常见。因为不清楚您遗漏了哪些。
注意:如果您尝试像这样从Kotlin调用该函数,则可以使用命名参数来忽略不是最后一个参数。但是Java没有那个。