![](/img/trans.png)
[英]Explain the Java code generated from using @JvmOverloads on Kotlin method
[英]how to use @jvmoverloads with interface in Kotlin
我的代码库是Java和Kotlin混合代码。 我想在接口方法上使用@JvmOverloads和默认参数。 像那样:
@JvmOverloads
fun getClientCompanyId(clientId: Long, date: DateTime = DateTime.now()): Long
不幸的是,我无法做到这一点,并且收到以下消息:
JvmOverloads不能在接口方法上使用
但是,如果我在重写函数上使用它,则会得到
平台声明冲突:以下声明具有相同的JVM签名(getClientCompanyId(JLorg / joda / time / DateTime;)J):
- @JvmOverloads公共打开乐趣getClientCompanyId(clientId:Long,date:DateTime = ...):Long
- @JvmOverloads公共打开乐趣getClientCompanyId(clientId:Long,date:DateTime = ...):Long
仅作记录:当我尝试将默认值放入重写的方法中时,我收到以下消息:
不允许覆盖函数在其参数上指定默认值
在科特林有可能做的事吗? 感谢所有的答案。
我相信您能做的最好的就是自己定义重载。 例如:
fun getClientCompanyId(clientId: Long, date: DateTime): Long
fun getClientCompanyId(clientId: Long) = getClientCompanyId(clientId, DateTime.now())
剧透:这个答案并不令人满意。
在将Java类和接口转换为kotlin时遇到了类似的问题。 我的旧Java代码接受@JvmOverloads
生成的代码的唯一方法是将我的kotlin interface
更改为一个open class
,并将所有fun()
更改为open fun()
可行,但这不是我们真正想要的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.