具有多个参数的 Kotlin setter
Kotlin setter with multiple arguments
可以很容易地设置一个 setter 就像 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(这不是 典型 setter 因为它有多个参数),但至少 Kotlin 给了你一个更好的调用语法:
x.setData(items) { /** listener impl */ }
使用配对怎么样?
class MyClass{
lateinit var data : Pair<List<GithubRepo>, (GithubRepo) -> Unit>
}
这将强制同时设置列表和侦听器。
但我认为您使用经典 setter 的解决方案是最好的和可读的
可以很容易地设置一个 setter 就像 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(这不是 典型 setter 因为它有多个参数),但至少 Kotlin 给了你一个更好的调用语法:
x.setData(items) { /** listener impl */ }
使用配对怎么样?
class MyClass{
lateinit var data : Pair<List<GithubRepo>, (GithubRepo) -> Unit>
}
这将强制同时设置列表和侦听器。
但我认为您使用经典 setter 的解决方案是最好的和可读的