0

I'm new to Kotlin and I've been reading a lot about how val is read-only and var is mutable. That's fine i get it. But what's confusing is when you create a mutable lsit/map/array and you've assigned it as a val, how is it allowed to be mutable? Doesn't that change the read-only aspect of val properties/variables/objects?

Asad Nawaz
  • 355
  • 1
  • 3
  • 14
  • You may want to see: https://stackoverflow.com/questions/44200075/val-and-var-in-kotlin – mrossini Nov 30 '19 at 18:58
  • @mrossini I did but I felt that didn't help me understand properly – Asad Nawaz Nov 30 '19 at 18:59
  • 1
    The `val` prevents reassigning, but it doesn't prevent modification. For example, by writing `val list: MutableList = mutableListOf()`, you say that `list` will always contain the same list, which still can be modified. – IlyaMuravjov Nov 30 '19 at 19:08

1 Answers1

2
class MyObject {
    val a = mutableListOf<String>()
}

means that the field for a is final, and there is no setter for a.

You thus can't do

myObject.a = anotherList

It says nothing about the mutability of the list itself. Since the list is mutable, you can do

myObject.a.add("foo")
JB Nizet
  • 678,734
  • 91
  • 1,224
  • 1,255