例如,如果我有以下数据类:
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 修饰符
java - 如何将 Java 赋值表达式转换为 Kotlin
java - Android Studio 3.1.3 - Unresolved reference
android - 无法获取提供商 com.google.android.gms.ads.Mobil
kotlin - 字符串插值在 Kotlin 中是如何工作的?