在 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 方法的主要内容,如果未能解决你的问题,请参考以下文章

date在java中用啥类型

如何在Kotlin中用GSON实现多态列表反序列化?

Kotlin的类型具体化在Java或Scala中是不可能实现的?

Java中用双缓冲技术消除闪烁

Kotlin、Java 8 和声纳覆盖率显示为 0

Kotlin学习之函数