簡體   English   中英

如何在Kotlin中通過接口使用@jvmoverloads

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM