具有多个参数的Kotlin setter

问题描述 投票:1回答:1

人们可以很容易地设置一个设置器,如 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方法来设置多个变量?

kotlin setter
1个回答
4
投票

这是不可能的,因为setter函数的工作方式--它们只接受一个参数。即使你考虑使用一个有多个参数的setter,看起来也不对。

x.data = items, { /** listener impl */ }

如果你 真的 想的话,你可以把你的参数归为一个单一的对象。

x.data = Wrapper(items, { /** listener impl */ })

但即使是这个建议也不是很好 在我看来,最好的建议是你认为的是 拙劣,使用一个Java风格设置器(这不是一个 典型 setter,因为它有多个参数),但至少 Kotlin 给你提供了一个更好的调用语法。

x.setData(items) { /** listener impl */ }

4
投票

那用对子呢?

class MyClass{
    lateinit var data : Pair<List<GithubRepo>, (GithubRepo) -> Unit>
}

这将迫使你同时设置list和listener。

但我认为你的古典setter的解决方案是最好的,也是可读的。

© www.soinside.com 2019 - 2024. All rights reserved.