可为空和不可为空的参数的相同方法

问题描述 投票:0回答:1

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

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")中提到的this answer批注,但这也不起作用。显然,我也可以将方法名称更改为其他名称,但这只是绕开并完全避免了该问题。

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

kotlin
1个回答
0
投票

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

但是,如果您想一想,根本就没有理由使用这种功能,因为您可以看到您的2nd方法已经可以正确处理所有事情,如果有的话,还要加上1(即使存在此功能,因为编译器将需要知道value是否为null或其他值,以始终知道要调用哪种方法。

到目前为止,我所见的通用方法是在您的方法中添加NotNull后缀,例如,在您不允许空值类型的情况下为parseNotNull,即使从Java调用代码,这种方式也是如此显然,参数不应为null。

© www.soinside.com 2019 - 2024. All rights reserved.