【发布时间】:2019-12-02 20:25:44
【问题描述】:
以下 lambda 表达式对在 lambda 之外创建的类进行操作。 我认为这很笨拙。有没有更好的方法?
class Builder {
var searchTerms = listOf<String>()
fun build(whatever: String): Builder {
searchTerms = searchTerms + whatever
return this
}
}
fun main() {
val b = Builder()
val toSearch = listOf<String>("Anna", "Berta", "Carla")
toSearch.forEach{ e-> b.build(e)}
}
【问题讨论】:
-
可能值得指出的是,构建器在 Kotlin 中的使用并不多,在 Kotlin 中,可以使构造器参数可选并提供默认值,这意味着单个构造器通常可以完成以下工作一个完整的建设者。 (类似地,当你有函数构造和
with函数时,方法每次都返回this的“流畅”风格并不是那么需要。) -
对于在一个对象上设置一堆参数的构建器来说确实如此。我不确定一个增长的对象(如上)是否符合 Builder 模式。如果上面的例子是一个不可变的类,它返回一个带有附加数据的副本,它就像 CoroutineContext 一样。不知道这个模式有没有名字。
标签: kotlin lambda functional-programming builder-pattern