Вы можете добавлять элементы в список после инициализации списка , если вы не делаете этого в области root класса. Так же, как если бы вы попытались сделать то же самое в Java.
т.е.
//this won't work, like you just found out
class Example {
var categories = ArrayList<String>()
categories.add("a") // this isn't inside a function or an `init` block
}
Вам нужно поместить его внутри функции или блока init
fun functionExample() {
var categories = ArrayList<String>()
categories.add("a") // This would work fine
}
или
class Example {
var categories = ArrayList<String>()
init {
categories.add("a")
}
}
Чтобы уточнить пример Сергея с apply
и почему это работает, если вы не делаете это внутри функции или init
class Example {
var categories = ArrayList<String>().apply {
add("a")
}
}
Компилятор kotlin выполняет оптимизацию и фактически обрабатывает ее так, как если бы вы помещали ее в блок init
. Если вы декомпилируете это и посмотрите, что происходит, он на самом деле это делает
/// Это то, что он компилирует обратно в Java publi c Example () {ArrayList var8 = new ArrayList (); var8.add ("а"); this.category = var8; }
То же самое, что происходит, когда вы используете блок init
.
Надеюсь, что это поможет!