代码之家  ›  专栏  ›  技术社区  ›  nepa

如何阻止Kotlin使用可选参数从一个Kotlin函数中创建多个重载Java方法

  •  1
  • nepa  · 技术社区  · 6 年前

    @When("^trying to login or register with email address \"([^\"]*)\"$")
    fun whenLoginOrRegister(email: String? = null) {
        email?.let { user.email = it }
        loginViewModel.whenLoggingIn()
    }
    

    Kotlin在这里做的是根据可选参数的数量创建两个或更多的函数重载。如何强制Kotlin只创建一个方法而不是多个方法?最好只有一种方法可以简单地接受 null .

    背景:我使用Cucumber,它通过反射来搜索这些带注释的函数。但是具有相同注释的两个函数会导致异常,因为不允许有歧义。如果我不能强迫Kotlin创建多个方法,也许有一个不同的解决方法可以在这种情况下提供帮助?

    1 回复  |  直到 6 年前
        1
  •  5
  •   yole    6 年前

    对于这样的函数,如果不使用 @JvmOverloads 注释,Kotlin创建了两个方法,关于可选参数的数量。一个方法具有常规签名,另一个方法另外接受已传递参数的位掩码。无法避免创建多个方法。

    在这种情况下,我只需创建两个单独的函数,“尝试登录或注册时不使用电子邮件”和“尝试登录或注册时使用电子邮件地址<email>”。