gpt4 book ai didi

kotlin - 如果不为空,则为构建器设置一个值 - Kotlin

转载 作者:行者123 更新时间:2023-12-02 18:09:55 24 4
gpt4 key购买 nike

我是 Kotlin 新手。有人能告诉我如何在下面的 cade 中设置值吗?应该有一种方法可以与 let() 一起使用,但我不确定该怎么做。

如果 var2 不为空,我应该设置它。否则会抛出空指针错误。

private fun myFunc(var1: Type1 , var2: Type2?) {

val request = class1.newBuilder()
.setType1(var1)
.setType2(var2) // how to set var2 only if not null?
.build()
clientClass.send(request)
}

最佳答案

如果每个构建器函数返回一个新的构建器实例,使用run:

private fun myFunc(var1: Type1 , var2: Type2?) {
val request = class1.newBuilder()
.setType1(var1)
.run { if(var2 != null) setType2(var2) else this }
.build()
clientClass.send(request)
}

如果构建器函数发生变异并返回相同的 Builder 实例,则使用 apply 会更简单

private fun myFunc(var1: Type1 , var2: Type2?) {
val request = class1.newBuilder()
.setType1(var1)
.apply { if(var2 != null) setType2(var2) }
.build()
clientClass.send(request)
}

// or more cleanly using apply for everything instead of chaining:

private fun myFunc(var1: Type1 , var2: Type2?) {
val request = class1.newBuilder().apply {
setType1(var1)
if(var2 != null) setType2(var2)
build()
}
clientClass.send(request)
}

其函数返回新实例的 Builder 类示例:

fun setType2(type2: Type2): Builder {
return CombinedBuilder(this, type2) // a new object
}

其函数返回相同实例的 Builder 类示例:

fun setType2(type2: Type2): Builder {
this.type2 = type2
return this // the same object
}

第二种比较常见,但有时也会用到第一种。您可能必须检查源代码才能确定。如果您不能确定,请使用 .run 方法,因为它对任何一个都有效。

关于kotlin - 如果不为空,则为构建器设置一个值 - Kotlin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72561424/

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