我有一个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
4条答案
按热度按时间kcugc4gi1#
还没有机会尝试它,但纯粹基于您的异常,以下代码应该可以工作:
说明:
Map<String, Void>
期望没有null
值。但是你创建了一个null
值的Pair
。人们建议调用需要Void
和null
的java方法,据我所知,这应该可以工作。但是对于您正在使用的Pair
构造函数,您肯定需要显式声明Map
可以包含null值。**编辑:**我的坏necro-ing,没有想到的日期,直到之后。:(
mnemlml82#
尝试更新您的Kotlin插件。我在'1.0.0-beta-1103-IJ 143 -27'上,以下代码编译时没有任何投诉/警告:
8e2ybdfx3#
我提出了两个解决方案,它们都可以编译(在Kotlin1.1.2-3下)。
你可能需要这个(不改变你的方法签名,但它不起作用):
或者类似的东西(改变你的签名,它就可以工作了):
祝你好运。
vwkv1x7d4#
简单的解决办法
(move当它需要被“保护”时,它会从同伴对象中出来)它并不是一个完全的Void类型,但它同样无用。
我这样使用它是因为我遇到了Collections.synchronizedSet(HashSet())的问题,这是一个偶尔会丢失的项,所以我想试试java.util.concurrent.ConcurrentHashMap。