Kotlin вызывает неверный перегруженный Java-метод с переменным числом аргументов - PullRequest
0 голосов
/ 12 февраля 2019

У меня есть два метода в Java:

Object get(A a)
Object get(A a, B... b)

, и когда я пытаюсь вызвать первый метод в Kotlin

get(someInstance)

Он всегда вызывает второй метод с пустым вторым параметром.

Как я мог бы вызвать первый метод из Kotlin в этом случае?

1 Ответ

0 голосов
/ 13 февраля 2019

Прежде всего, этого не происходит, когда методы определены в Kotlin:

class A
class B

fun f(a: A) { println("one") }
fun f(a: A, vararg rest: B) { println("many") }

fun main(args: Array<String>) {
    f(A())
}

print one.Поиск по https://youtrack.jetbrains.com/issues?q=kotlin%20vararg%20java Я не могу найти эту точную проблему (https://youtrack.jetbrains.com/issue/KT-11150 близок, но имеет get(Object a) в качестве перегрузки без vararg).Поэтому я предлагаю вам опубликовать его там, если вы можете воспроизвести его.

Два возможных обходных пути:

  1. попытка адаптировать трюк из Перегрузка функции Котлина (varargs vsодин параметр) :

    val a: A = ...
    a.let(::get)
    
  2. определить оболочку в Java:

    Object getNonVararg(A a) { return get(a); } 
    

и вызвать ее из Kotlin.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...