Как написать сеттер для mutableList? - PullRequest
0 голосов
/ 05 апреля 2020

Я пытался сделать это, но это не сработало

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

как-то validateData () не запустился

1 Ответ

0 голосов
/ 06 апреля 2020

Это действительно так.

Я предполагаю, что то, что вы действительно хотите, это запускать validateData каждый раз, когда строка добавляется или удаляется из вашего списка.

Вы можете написать Пользовательский список, используя 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(){ ... }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...