在 Kotlin 中用复杂类型覆盖 Java 方法
Posted
技术标签:
【中文标题】在 Kotlin 中用复杂类型覆盖 Java 方法【英文标题】:Override Java method with complex type in Kotlin 【发布时间】:2014-11-30 05:04:27 【问题描述】:我正在尝试实现JsonHttpResponseHandler#onSuccess。当我使用时:
fun onSuccess(status: Int, headers: Array<Header>?, response: JSONArray?)
我得到一个意外的覆盖错误,但是当我添加 override
修饰符时,我得到一个 onSuccess overrides nothing
错误。是我做错了什么,还是我发现了 Kotlin 编译器中的错误?
【问题讨论】:
【参考方案1】:尝试使用“覆盖方法”(Mac 上为^O
),它会提示正确的签名。
我想是的
fun onSuccess(status: Int, headers: Array<out Header>?, response: JSONArray?)
但我不确定。
【讨论】:
太好了,成功了。覆盖方法默认是 cmd-O,但不是 ctrl-O。 是的,我一直忘记默认的键盘映射是“Mac OS X”,而不是“Mac OS X 10.5+”。后者更符合我的口味,顺便说一句【参考方案2】:在 Kolint M9 中,您可以更灵活地覆盖有关可空性的 Java 方法。这是人们最容易出错的事情之一,从 Kotlin 的角度看,Java 参数可能是 NULL。在 M9 中,您可以接收您希望 Kotlin 如何处理 Nullability 的参数,而不是从 Java 角度实际看待它们的方式。因此,如果您知道参数永远不会为空,则可以在没有 ? 的情况下接收它。以前这会导致检查您是否实际覆盖该方法并给出错误的不匹配,现在它被认为是等效的。
【讨论】:
以上是关于在 Kotlin 中用复杂类型覆盖 Java 方法的主要内容,如果未能解决你的问题,请参考以下文章