我有一个Java函数,要求我Void
根据类型约束传递参数.就像是:
void foo(Void v) {
// do something
}
Run Code Online (Sandbox Code Playgroud)
现在我想从Kotlin调用该函数,但编译器抱怨当我用null
Java 调用它时类型不兼容:
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)
没有机会尝试它,但纯粹基于您的异常,以下代码应该工作:
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
可以包含空值.
编辑:我对坏死的不好,没想到之后的日期.:(
尝试更新您的 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)
归档时间: |
|
查看次数: |
4455 次 |
最近记录: |