我在java中有两种方法:
Object get(A a)
Object get(A a, B... b)
Run Code Online (Sandbox Code Playgroud)
当我尝试调用 Kotlin 中的第一个方法时
get(someInstance)
Run Code Online (Sandbox Code Playgroud)
它总是使用空的第二个参数调用第二个方法。
在这种情况下,我如何从 Kotlin 调用第一个方法?
首先,当在 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())
}
Run Code Online (Sandbox Code Playgroud)
印刷one。在https://youtrack.jetbrains.com/issues?q=kotlin%20vararg%20java上搜索我找不到这个确切的问题(https://youtrack.jetbrains.com/issue/KT-11150很接近,但它具有get(Object a)非可变参数重载)。因此,如果您可以复制它,我建议您将其发布在那里。
两种可能的解决方法:
尝试采用 Kotlin 函数重载的技巧(可变参数 vs 单参数):
val a: A = ...
a.let(::get)
Run Code Online (Sandbox Code Playgroud)在Java中定义一个包装器:
Object getNonVararg(A a) { return get(a); }
Run Code Online (Sandbox Code Playgroud)并从 Kotlin 调用它。
| 归档时间: |
|
| 查看次数: |
388 次 |
| 最近记录: |