调用不接受kotlin的null的java代码

IDEA社区2017.1.2,JRE 1.8,Kotlin 1.1.2-2

我有位于libGdx中的Java方法,它们没有关于它们的可空性的任何注释,例如:

public void render (final RenderableProvider renderableProvider) { renderableProvider.getRenderables(renderables, renderablesPool); 

我们可以看到,参数不能为空。 然而,由于没有任何说明它是非空参数,Kotlin会愉快地在RenderableProvider?传递null RenderableProvider? 。 如何告诉Kotlin在编译期间检查我应该传递RenderableProvider而不是RenderableProvider?

我已阅读外部注释 ,但没有“指定自定义Kotlin签名”,如果我注释renderableProvider作为@NotNull没有任何更改 – kotlin仍允许为空。

我甚至试图用XML手动替换org.jetbrains.annotations.NotNulljavax.annotation.Nonnull ,但它没有什么区别 – 代码编译和NPE崩溃。

外部注释不再支持 。 您不得不分叉libgdx并注释那里的方法,或者不幸遇到这个问题。

你可以把它包装在一个扩展函数中,然后只用它来渲染:

 fun RenderClass.renderSafe(renderProvider: RenderableProvider) = this.render(renderProvider) 

现在你不能传递null