Kotlin使用可变数量的参数调用错误的重载java方法

问题描述 投票:4回答:1

我在java中有两个方法:

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

当我试图在Kotlin中调用第一个方法时

get(someInstance)

它始终使用空的第二个参数调用第二个方法。

在这种情况下,如何从Kotlin调用第一种方法?

java kotlin
1个回答
1
投票

首先,当在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())
}

打印one。搜索https://youtrack.jetbrains.com/issues?q=kotlin%20vararg%20java我找不到这个确切的问题(https://youtrack.jetbrains.com/issue/KT-11150很接近,但它有get(Object a)作为非vararg超载)。所以我建议你把它发布在那里,如果你可以重现它。

两种可能的解决方法:

  1. 试图改变Kotlin function overloading (varargs vs single parameter)的技巧: val a: A = ... a.let(::get)
  2. 在Java中定义一个包装器: Object getNonVararg(A a) { return get(a); }

并从Kotlin调用它。

© www.soinside.com 2019 - 2024. All rights reserved.