kotlin - 可空和不可空参数的相同方法
问题描述
我正在尝试创建两个几乎相同的方法来处理可空和不可空参数略有不同:
fun parse(type: Any) : MyObject {
return handleParse(type)
}
fun parse(type: Any?) : MyObject? {
if (type == null)
return null
return handleParse(type)
}
但我在 Android Studio 中收到此错误:
Platform declaration clash: The following declarations have the same JVM signature
目标是它自动处理 Kotlin 中的可空值和不可空值,而无需我!!
每次都使用可空术语调用它。
我已经尝试添加此答案@JvmName("-name")
中提到的注释,但这也不起作用。显然,我也可以将方法名称更改为其他名称,但这只是绕圈子,完全避免了这个问题。
希望有一种简单的方法可以做到这一点,或者至少有一个明智的解决方法。还希望了解当前工作方式背后的原因,以及为什么我应该或不应该这样做。
解决方案
这不起作用的原因很简单,Java 没有 null 安全类型,这意味着这两种方法与 Java 看起来完全一样,而 Kotlin 旨在提供与 Java 尽可能多的互操作性。
但是,如果您多想一下,根本没有理由使用这种功能,因为您可以看到您的第二个方法已经正确处理了所有内容,并添加了 1 if case,即使此功能存在也必须存在,因为编译器会需要知道 value 是否为 null 以知道无论如何要调用哪个方法。
到目前为止,我看到的常见方法是NotNull
在您的方法中添加后缀,例如,在您的情况parseNotNull
下,如果您不允许为空类型,即使从 Java 调用代码也很明显参数不应该为空。
推荐阅读
- configure - configure GnuTLS - libnettle 3.4.1 was not found - OS X Lion
- sql - 使用 Teradata SQLquery 限制结果
- ios - 如何在 SwiftUI 中限制拖动距离
- sql - oracle执行中过滤谓词中的SYS_AUDIT是什么
- html - 使用 MSO 样式前缀格式化 word 页面
- c++ - 如何从 C++ 中的实例解析模板类型
- javascript - Problem with thumbnail images in gatsby.js
- c++ - Is it a bug of C++ gcc HEAD 10.0.0 20190 relative to friend functions
- node.js - 外部 Web 服务将用户重定向并将数据发布到我的回调 URL。如何在 Express/Next.js 应用程序中将发布的数据呈现给用户?
- php - PhpSpreadsheet 损坏的 xlsx 文件