ибо могут скастить и поменять
Э... мы рассматриваем коллег как партизан, намеренно подрывающих устойчивость кода?
ну контекст не известен) может это публичная либа?)
Окей, значит toMap/toList только для защиты от человеческого фактора? Если мы предполагаем, что это не либа и партизанить никто не будет - вызывать это не обязательно?
Если каста не боитесь, можете не вызывать. В обратном случае преобразовать придётся.
Я думаю, что закладывваться на любителей играть в рефлексию - так себе идея. Если захотят, все равно сломают
Публичная либа имеет публичное API. Если кто-то ее хачит и ломает API, это проблема того, кто хачит
боюсь toMap и toList вернут те же мутабельные коллекции скастенные в иммутабл
У меня тоже такое ощущение. Вообще, protective copy надо применять только когда оно реально нужно.
Ну вот а когда оно реально нужно?
Например когда ты передаешь именно изменяемое состояние и хочешь его потом менять, но независимым образом. Или когда ты хочешь гарантировать, что результат будет неизменен. Например у тебя есть быстро меняющийся список, а в UI ты хочешь отдать снапшот
А... Оно ж по ссылке будет меняться... Да...
Да. Но обычно это не страшно, потому что результат консистентен всегда. Я в последнее время стараюсь где это надо на выход отдавать не коллекцию, а Iterator/sequence/flow, который дает тебе по сути снапшот без оверхеда на защитное копирование. Его можно прочитать только один раз.
Так flow же отдает постепенно данные, или это не принципиально? Насчёт sequence - хорошая идея
если это List.toFlow, то почти ничем не отличается от Sequence
Обсуждают сегодня