2017-01-18 8 views
4

My codebase - это смешанный код java и kotlin. Я хотел бы использовать метод @JvmOverloads для интерфейса с аргументами по умолчанию. Как что:Как использовать @jvmoverloads с интерфейсом в Kotlin

@JvmOverloads 
fun getClientCompanyId(clientId: Long, date: DateTime = DateTime.now()): Long 

Я не могу сделать это, к сожалению, и я получаю сообщение, что:

JvmOverloads не могут быть использованы по методам интерфейса

Однако, если я использую его на переопределены функции, то я получаю

Столкновение с объявлением платформы. Следующие объявления имеют одинаковые JVM s IGNATURE (getClientCompanyId (JLorg/Joda/время/DateTime;) J):

    открытым
  • @JvmOverloads общественного весело getClientCompanyId (ClientId: Длинные, дата: DateTime = ...): Long
  • @JvmOverloads общественности с открытым весело getClientCompanyId (ClientId: Длинная, дата: DateTime = ...): Long

и только для записи: когда я пытаюсь поставить значение по умолчанию в перегруженном методе, который я получаю сообщение, что:

Функция переопределения не позволяет указывать значения по умолчанию для своих параметров

Возможно ли это сделать в котлин? Спасибо за ответы на все вопросы.

+0

Я столкнулся с той же проблемой, вы когда-нибудь находили лучшее решение? – BlackCat

+0

Насколько я знаю, нет ни одного – xklakoux

ответ

1

Я считаю, что лучшее, что вы можете сделать, это определить перегрузки самостоятельно. например:

fun getClientCompanyId(clientId: Long, date: DateTime): Long 
fun getClientCompanyId(clientId: Long) = getClientCompanyId(clientId, DateTime.now()) 
+0

Спасибо, но я уже сделал это и пытался его улучшить. – xklakoux

+0

Насколько я понимаю, вы надеялись на лучший ответ. Если вы хотите обсудить добавление функций на язык, чтобы улучшить это, я рекомендую публикацию на сайте forum.kotlinlang.org. – mfulton26

Смежные вопросы