如果每个生成器函数返回一个新的生成器实例,请使用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)
}
如果生成器函数发生变化并返回相同的生成器实例,则使用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)
}
其函数返回新实例的生成器类示例:
fun setType2(type2: Type2): Builder {
return CombinedBuilder(this, type2) // a new object
}
其函数返回相同实例的生成器类示例:
fun setType2(type2: Type2): Builder {
this.type2 = type2
return this // the same object
}
第二种类型更常见,但有时使用第一种类型.您可能需要判断源代码才能确定.如果您不能确定,请使用.run
方法,因为这两种方法都适用.