如何在Kotlin中使用带有接口的@jvmoverloads

xkl*_*oux 15 java kotlin

我的代码库是混合java和kotlin代码.我想在接口方法上使用@JvmOverloads和默认参数.像那样:

@JvmOverloads
fun getClientCompanyId(clientId: Long, date: DateTime = DateTime.now()): Long
Run Code Online (Sandbox Code Playgroud)

不幸的是我不能这样做,我得到的信息是:

JvmOverloads不能用于接口方法

但是,如果我在重写函数上使用它,那么我得到

平台声明冲突:以下声明具有相同的JVM签名(getClientCompanyId(JLorg/joda/time/DateTime;)J):

  • @JvmOverloads public open fun getClientCompanyId(clientId:Long,date:DateTime = ...):Long
  • @JvmOverloads public open fun getClientCompanyId(clientId:Long,date:DateTime = ...):Long

并且仅用于记录:当我尝试将默认值放在重写方法中时,我得到以下消息:

不允许覆盖函数在其参数上指定默认值

在kotlin做一件事可能吗?感谢所有的答案.

mfu*_*n26 9

我相信你能做的最好的事情就是自己定义重载。例如:

fun getClientCompanyId(clientId: Long, date: DateTime): Long
fun getClientCompanyId(clientId: Long) = getClientCompanyId(clientId, DateTime.now())
Run Code Online (Sandbox Code Playgroud)

  • 谢谢伙计,但显然我已经这样做了,并且正在努力改进它。 (2认同)
  • 我知道您希望得到更好/不同的答案。如果您想讨论向语言添加功能以改进这一点,我建议您在 Discussion.kotlinlang.org 上发帖。 (2认同)