人们可以很容易地设置一个设置器,如 data
如何在同一方法中设置多个值?setData
来实现。
class MyClass{
var data = listOf<GithubRepo>() // individual setter
set(value) {
field = value
}
lateinit var listener: (GithubRepo) -> Unit // lambda
// classical setter like in Java
fun setData( data: List<GithubRepo>, listener: (GithubRepo) -> Unit): Unit{
this.data = data
this.listener = listener
}
}
有没有更多的Kotlin方法来设置多个变量?
这是不可能的,因为setter函数的工作方式--它们只接受一个参数。即使你考虑使用一个有多个参数的setter,看起来也不对。
x.data = items, { /** listener impl */ }
如果你 真的 想的话,你可以把你的参数归为一个单一的对象。
x.data = Wrapper(items, { /** listener impl */ })
但即使是这个建议也不是很好 在我看来,最好的建议是你认为的是 拙劣,使用一个Java风格设置器(这不是一个 典型 setter,因为它有多个参数),但至少 Kotlin 给你提供了一个更好的调用语法。
x.setData(items) { /** listener impl */ }
那用对子呢?
class MyClass{
lateinit var data : Pair<List<GithubRepo>, (GithubRepo) -> Unit>
}
这将迫使你同时设置list和listener。
但我认为你的古典setter的解决方案是最好的,也是可读的。