Имутабельность нам нужна для:
👉 Многопоточки
👉 Предстказуемого поведения обьекта и отстутсвия сайд эффектов
👉 Корректного описания состояния обьекта
val в байт коде выглядит вот так:
private final Ljava/lang/String; text
@Lorg/jetbrains/annotations/NotNull;() // invisible
Что гарантирует нам постоянство ссылки, но не обьекта
Тоже валидный код, где мы переопределяем
val как var
interface State<out T> {
val value: T
}
interface MutableState<T> : State<T> {
override var value: T
operator fun component1(): T
operator fun component2(): (T) -> Unit
}
val state: State<String> = remember { mutableStateOf("text") }
(state as MutableState<String>).value = "changed"
Документация нигде не определяет
val как immutable, только как переменную доступную только для чтенияЗадачка со звездочкой. Как создать полностью неизменяемый обьект?