调用不接受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.NotNull
与javax.annotation.Nonnull
,但它没有什么区别 – 代码编译和NPE崩溃。
外部注释不再支持 。 您不得不分叉libgdx并注释那里的方法,或者不幸遇到这个问题。
你可以把它包装在一个扩展函数中,然后只用它来渲染:
fun RenderClass.renderSafe(renderProvider: RenderableProvider) = this.render(renderProvider)
现在你不能传递null
。