具有多个参数的 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 的解决方案是最好的和可读的