kotlin custom получает неизменяемый список из mutableList - PullRequest
0 голосов
/ 01 июня 2018

У меня есть собственный метод получения изменяемого списка, который возвращает неизменный список с помощью библиотеки Google Guava.И затем этот изменяемый список доступен в конструкторе.

data class mutableClass(val list: List<Foo>) {

    private val mutableList: MutableList<Foo>
        get() = ImmutableList.copyOf(field)

    init {
       mutableList = mutableListOf()
       list.forEach {
          mutableList.add(it.copy()) // Exception is thrown here.
          // It actually calls its getter method which is an immutable 
          // list, so when init this class, it throw exception                   
       }
    }
}

data class Foo {}

И я декомпилирую его на Java, в блоке init он вызывает метод getter mutableList.Есть ли способ вызвать сам mutabbleList вместо метода getter?

1 Ответ

0 голосов
/ 01 июня 2018

Конечно, он вызывает метод получения (который возвращает ImmutableList.copyOf(field)).

Вы можете просто назначить mutableList новый скопированный изменяемый список в вашем блоке init:

data class MutableClass(val list: List<Foo>) {

    private val mutableList: MutableList<Foo>
        get() = ImmutableList.copyOf(field)

    init {
        mutableList = list.map { it.copy() }.toMutableList()
    }
}

или без init:

data class MutableClass(val list: List<Foo>) {

    private val mutableList: MutableList<Foo> = list.map { it.copy() }.toMutableList()
        get() = ImmutableList.copyOf(field)

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