在Kotlin中使用Java Void类型

TBi*_*iek 11 java kotlin

我有一个Java函数,要求我Void根据类型约束传递参数.就像是:

void foo(Void v) {
    // do something
}
Run Code Online (Sandbox Code Playgroud)

现在我想从Kotlin调用该函数,但编译器抱怨当我用nullJava 调用它时类型不兼容:

foo(null);
Run Code Online (Sandbox Code Playgroud)

我必须传递给该函数,以便Kotlin编译器接受它?

更新:实际代码如下所示:

fun foo(): Map<String, Void> {
    return mapOf(Pair("foo", null))
}
Run Code Online (Sandbox Code Playgroud)

更新:使用null as Void实际上也不起作用:

kotlin.TypeCastException: null cannot be cast to non-null type java.lang.Void
Run Code Online (Sandbox Code Playgroud)

Con*_*ies 6

没有机会尝试它,但纯粹基于您的异常,以下代码应该工作:

fun foo(): Map<String, Void?> {
    return mapOf(Pair("foo", null))
}
Run Code Online (Sandbox Code Playgroud)

说明:Map<String, Void>期望没有null值.但是你正在创造Pair一个null有价值的东西.人们建议调用需要的java方法,据我所知应该Void使用null它,但对于Pair你正在使用的构造函数,你肯定需要明确声明Map可以包含空值.

编辑:我对坏死的不好,没想到之后的日期.:(


aga*_*aga 3

尝试更新您的 Kotlin 插件。我使用“1.0.0-beta-1103-IJ143-27”,并且以下代码编译时没有任何投诉/警告:

// On Java side
public class Test {
    public void test(Void v) {

    }
}

// On Kotlin side
fun testVoid() {
    Test().test(null)
}
Run Code Online (Sandbox Code Playgroud)