在Kotlin中使用Java Void类型
我有一个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
没有机会尝试它,但纯粹基于你的例外,下面的代码应该工作:
fun foo(): Map<String, Void?> { return mapOf(Pair("foo", null)) }
说明: Map<String, Void>
期望没有null
值。 但是你正在创建一个null
值的Pair
。 人们正在建议调用Java方法,这个方法需要使用null
,应该尽我所能,但对于使用的Pair
构造函数,您肯定需要明确指出Map
可以包含空值。
编辑:我坏对于necroing,没有想到之后的日期。 🙁
尝试更新您的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) }
我提出了两个解决方案,他们都编译(根据Kotlin 1.1.2-3)。
您可能需要(不改变您的方法签名,但它不起作用):
fun foo(): Map<String, Void> { return mapOf(Pair("foo", throw Exception("Why? Why you call me"))) }
或类似的东西(改变你的签名,它的作品):
fun foo(): Map<String, Void?> { return mapOf(Pair("foo", null as Void?)) }
祝你好运。