kotlin - 传递 null 时,有没有办法在非可选参数上使用默认值?

例如,如果我有以下数据类:

data class Data(
    val name: String = "",
    val number: Long = 0
)

以及可以返回null的函数:

fun newName(): String? {}

fun newNumber(): Long? {}

我知道如果它们不是 null,我可以使用以下函数来使用函数的值:

val newName = newName()
val newNumber = newNumber()

val data = Data(
        if (newName != null) newName else "",
        if (newNumber != null) newNumber else 0
)

但是当值为 null 时,有没有办法只使用 Data 类的构造函数中指定的默认值?

我在文档中找不到任何东西,但我希望这样的东西能起作用:

val data = Data(newName()?, newNumber()?)

但这不会编译。

最佳答案

您可以定义 companion object为您的数据类和overload它的invoke operator传递 null 时使用默认值:

data class Data private constructor(
    val name: String,
    val number: Long
) {
    companion object {
        operator fun invoke(
            name: String? = null,
            number: Long? = null
        ) = Data(
            name ?: "",
            number ?: 0
        )
    }
}

https://stackoverflow.com/questions/44728519/

相关文章:

android - Dagger 2 与 Kotlin 的多重绑定(bind)

android - Kotlin 等价于 Java 的 equalsIgnoreCase

android - 在 Kotlin 中的原始类型属性上不允许使用 lateinit 修饰符

string - Kotlin 多行字符串中的模板转义

java - 如何将 Java 赋值表达式转换为 Kotlin

java - Android Studio 3.1.3 - Unresolved reference

android - 无法获取提供商 com.google.android.gms.ads.Mobil

kotlin - 字符串插值在 Kotlin 中是如何工作的?

list - 在 Kotlin 中,如何在迭代时修改列表的内容

android - 在 android studio 中运行带有 main 函数的单个 kotlin