![](/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.