如何为mutableList编写设置器? [英] How to write a setter for a mutableList?

查看:69
本文介绍了如何为mutableList编写设置器?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试这样做,但是没有用

I was trying to do this, but it did not work

var stringList = mutableListOf<String>()
    set(value) {
        field = value
        validateData()
    }

以某种方式validateData()无法运行

somehow validateData() did not run

推荐答案

它确实做到了.

我假设您真正想要的是每次在列表中添加或删除String时触发validateData.

I'm assuming that what you really want it's to trigger validateData each time a String is added or removed from your list.

您可以使用implementation by delegation [1]编写自定义列表. :

class MList(
    private val list: MutableList<String> = mutableListOf(),
    private val listener: () -> Unit
) : MutableList<String> by list {

    override fun add(element: String) = 
        list.add(element).also { listener.invoke() }

    override fun remove(element: String) =
        list.remove(element).also { listener.invoke() }

    ...    

}

并像这样使用它:

class Foo {

    var stringList = MList { validateData() } // Now each time stringList.add() is called validateData will be triggered

    private fun validateData(){ ... }

}

这篇关于如何为mutableList编写设置器?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆