调用不接受来自 kotlin 的 null 的 java 代码
Calling java code that doesn't accept null from kotlin
IDEA 社区 2017.1.2,JRE 1.8,Kotlin 1.1.2-2
我有 Java 方法,位于 libGdx 中,没有关于它们是否为空的任何注释,例如:
public void render (final RenderableProvider renderableProvider) {
renderableProvider.getRenderables(renderables, renderablesPool);
如我们所见,参数不能为空。然而,由于没有任何迹象表明它是非空参数,Kotlin 会很乐意在 RenderableProvider?
中传递空值。我如何告诉 Kotlin 在编译时检查我应该传递 RenderableProvider
而不是 RenderableProvider?
?
我读过 external annotations,但是没有 "Specify Custom Kotlin Signature",如果我将 renderableProvider
注释为 @NotNull
没有任何变化 - kotlin 仍然允许 null。
我什至尝试手动将 XML 中的 org.jetbrains.annotations.NotNull
替换为 javax.annotation.Nonnull
,但这没有任何区别 - 代码编译并因 NPE 而崩溃。
外部注释是no longer supported。不幸的是,你要么必须 fork libgdx 并在那里注释方法,要么忍受这个问题。
您可以将其包装在扩展函数中,然后仅将其用于渲染:
fun RenderClass.renderSafe(renderProvider: RenderableProvider) =
this.render(renderProvider)
现在你不能通过null
。
IDEA 社区 2017.1.2,JRE 1.8,Kotlin 1.1.2-2
我有 Java 方法,位于 libGdx 中,没有关于它们是否为空的任何注释,例如:
public void render (final RenderableProvider renderableProvider) {
renderableProvider.getRenderables(renderables, renderablesPool);
如我们所见,参数不能为空。然而,由于没有任何迹象表明它是非空参数,Kotlin 会很乐意在 RenderableProvider?
中传递空值。我如何告诉 Kotlin 在编译时检查我应该传递 RenderableProvider
而不是 RenderableProvider?
?
我读过 external annotations,但是没有 "Specify Custom Kotlin Signature",如果我将 renderableProvider
注释为 @NotNull
没有任何变化 - kotlin 仍然允许 null。
我什至尝试手动将 XML 中的 org.jetbrains.annotations.NotNull
替换为 javax.annotation.Nonnull
,但这没有任何区别 - 代码编译并因 NPE 而崩溃。
外部注释是no longer supported。不幸的是,你要么必须 fork libgdx 并在那里注释方法,要么忍受这个问题。
您可以将其包装在扩展函数中,然后仅将其用于渲染:
fun RenderClass.renderSafe(renderProvider: RenderableProvider) =
this.render(renderProvider)
现在你不能通过null
。