在 Kotlin 中使用 Java Void 类型

2022-09-04 22:21:37

我有一个Java函数,由于类型约束,它要求我传递参数。像这样:Void

void foo(Void v) {
    // do something
}

现在我想从Kotlin调用该函数,但是编译器抱怨当我像从Java中调用它一样调用它时,这些类型不兼容:null

foo(null);

我必须向该函数传递什么才能让 Kotlin 编译器接受它?

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

fun foo(): Map<String, Void> {
    return mapOf(Pair("foo", null))
}

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

kotlin.TypeCastException: null cannot be cast to non-null type java.lang.Void

答案 1

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

fun foo(): Map<String, Void?> {
    return mapOf(Pair("foo", null))
}

解释: 期望没有值。但你正在创造一个有价值的。据我所知,人们建议调用java方法,该方法应该可以工作,但是对于您正在使用的构造函数,您绝对需要明确声明可以包含空值。Map<String, Void>nullPairnullVoidnullPairMap

编辑:我对死灵不好,直到之后才想到日期。:(


答案 2

尝试更新您的 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)
}

推荐