1
 private val _ld = MutableLiveData<Int>()
 val ld: LiveData<Int> = _ld
 (ld as MutableLiveData).value = 78

Данный код, на удивление, оказался полностью рабочим.
я могу изменять ЛайвДату из мест, где я должен только ее слушать.
какой смысл продолжать писать Лайвдаты через shadow properti??

есть ли способ сделать так, чтобы такой "обход" системы был невозможен или приводил к ошибке??

задан 19 сент. 2022 в 13:42
6
  • 2
    Сокрытием реального типа вы гарантируете пользователю кода только базовый функционал и оставляете за собой право изменить реализацию, не сломав пользовательский код. Ничто не помешает использовать функционал реального типа - в конце концов есть рефлексия. И если кто-то сделал такой финт - это его проблемы. Commented 19 сент. 2022 в 15:10
  • 1
    Как вариант, не выставляйте лайвдату наружу вообще - пусть класс принимает колбек и сам его подписывает на лайвдату. Commented 19 сент. 2022 в 15:22
  • 1
    Еще можно написать свой LiveData прокси, который будет скрывать что он мутабельный внутри. Commented 20 сент. 2022 в 10:09
  • Интересно, а такой фокус проходит с StateFlow? Commented 23 сент. 2022 в 6:04
  • @Barmaley попробовал - да, проходит. ` val _a = MutableStateFlow(8); val a: Flow<Int> = _a` Commented 23 сент. 2022 в 6:33

0

Знаете кого-то, кто может ответить? Поделитесь ссылкой на этот вопрос по почте, через Твиттер или Facebook.

Ваш ответ

Черновик сохранён
Черновик удалён

Зарегистрируйтесь или войдите

Регистрация через Google
Регистрация через почту

Отправить без регистрации

Необходима, но никому не показывается

Отправить без регистрации

Необходима, но никому не показывается

Нажимая «Отправить ответ», вы соглашаетесь с условиями пользования и подтверждаете, что прочитали политику конфиденциальности.

Начните задавать вопросы и получать на них ответы

Найдите ответ на свой вопрос, задав его.

Задать вопрос

Изучите связанные вопросы

Посмотрите похожие вопросы с этими метками.