gpt4 book ai didi

kotlin - 可空和不可空参数的相同方法

转载 作者:行者123 更新时间:2023-12-02 13:34:42 25 4
gpt4 key购买 nike

我正在尝试创建两个几乎相同的方法,这些方法处理可空参数和不可空参数的方式略有不同:

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中的可为空和不可为空的值,而每次我以可为空的条件调用它时都无需使用 !!

我已经尝试过添加 this answer中提到的 @JvmName("-name")批注,但这也不起作用。显然,我也可以将方法名称更改为其他名称,但这只是绕开并完全避免了该问题。

希望有一个简单的方法可以做到这一点,或者至少是一个明智的解决方法。也将赞赏当前工作方式背后的原因,以及为什么我应该或不应该这样做。

最佳答案

这样做不起作用的原因很简单,Java没有空安全类型,这意味着这两种方法在Java上看起来都是完全相同的,而且Kotlin旨在提供与Java的尽可能多的互操作性。

但是,如果您多考虑一点,就没有理由使用该功能,因为您可以看到您的2nd方法已经可以正确处理所有事情,如果有则加1,即使该功能存在,它也必须存在,因为编译器会需要知道value是否为null或其他值,以了解仍然要调用哪种方法。

到目前为止,我见过的常见方法是在方法中添加NotNull后缀,例如,在您不允许空值类型的情况下,可以使用parseNotNull,即使从Java调用代码,这种方式也很明显,不为空。

关于kotlin - 可空和不可空参数的相同方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59446897/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com