Kotlin如何推断Java方法参数可为空性?

Ale*_*kiy 3 java null kotlin

我正在尝试org.springframework.data.mongodb.core.query.Update#set从Kotlin代码调用Java方法。此方法声明为

public Update set(String key, Object value)
Run Code Online (Sandbox Code Playgroud)

没有关于参数可空性的其他注释或注释。事实上,它只是把value成HashMap,所以有效地value可能null。

但是,Kotlin编译器将value类型视为Any(而不是期望的Any!)类型,并且在null与

Null can not be a value of a non-null type Any
Run Code Online (Sandbox Code Playgroud)

有!!明显原因导致传递可空值KotlinNullPointerException,as Any抛出异常TypeCastException。

这种可空性推断背后的逻辑是什么?通过null反射传递参数实际上效果很好,但是还有更自然的解决方案吗?