【发布时间】:2015-11-19 15:31:56
【问题描述】:
由于类型限制,我有一个 Java 函数需要我传递 Void 参数。比如:
void foo(Void v) {
// do something
}
现在我想从 Kotlin 调用该函数,但编译器抱怨当我使用 null 调用它时类型不兼容,就像我从 Java 中一样:
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
【问题讨论】:
-
您是否尝试过将变量设置为空?该函数使用的是 INT 还是 OBJECT?如果是这样,可以在尝试访问或更改它之前将其设置为 NULL。这是您正在调用的方法还是从另一个类继承的?
-
实际上我继承了一个应该返回
Map<String, Void>并希望返回return mapOf(Pair("foo", null))的函数 -
编译器给出的确切错误信息是什么?我无法在孤立的样本中重现该问题,即您应该能够将 null 传递给
Void参数 -
@AlexanderUdalov
Error:(33, 16) Kotlin: Type inference failed. Expected type mismatch: inferred type is kotlin.Map<kotlin.String, kotlin.Nothing?> but kotlin.Map<kotlin.String, java.lang.Void> was expected。这是 Kotlin 的 Beta 2 版本。 -
您是否尝试将其更改为
Void??