[java] Как жить без константных ссылок
Как я понимаю, нужны или не нужны константные ссылки - это одна из тем священных войн. Я пишу на C#, и если мне важна immutability, использую интерфейсы. Это больше кода, но Java вообще очень многословный язык, так что привыкай
смотри scala, там есть val.
есть Unmodifiable обёртки, можно их использовать
Или возвращаете из методов голые объекты в надежде, что их никто не изменит?что ты подразумеваешь под изменением объекта? изменение его филдов?
Java профессионалы, расскажите, вы реально для каждого класса делаете такой интерфейс?Нет.
Или возвращаете из методов голые объекты в надежде, что их никто не изменит?Да.
Вызов методов, которые изменяют состояние объекта.
Ну какой смысл от самого себя что-то закрывать?
От внедрения в память процесса конст ссылки не спасают (и не должны).
А если разработчик криворукий мудак и не знает, что изменять объект, переданный по ссылке нельзя (доку не прочитал, или просто не в курсе что код делает), то пусть джамшутит в быдлоконторах и утопает в дебаге. Для таких приготовлено особое место в аду.
Ну какой смысл от самого себя что-то закрывать?бывает такое, что пользуешься чужими библиотеками
А, и еще от случайных ошибок и опечаток доки страхуют гораздо лучше, чем константость ссылки.
Ну какой смысл от самого себя что-то закрывать?Подозреваю, что понятие "оптимизации" тебе не очень знакомо.
Ну, правда, это если не к вопросу о "что-то закрывать", а по теме треда.
От внедрения в память процесса конст ссылки не спасают (и не должны).на андройде спасают. И на любой другой замкнутой песочнице тоже будут спасать.
Складно поешь, оказывается читать доку ( в лучшем случае) и разбираться в чужом коде (в худшем) гораздо удобней, чем посмотреть, константна ли ссылка на объект.Проблема в том, что, как упомянуто выше, константные ссылки не работают™. То, что тебе дали объект по константной ссылке, вовсе не означает что ты можешь его себе куда-то сохранить (а иначе зачем ты его менял бы, если б тебе его по неконстантной ссылке дали?), ибо его истенный владелец может с ним сделать непредсказуемое, у него-то ссылка неконстантная. Так что лучше делай полную иммутабельность, полумеры дают ложное чувство безопасности, ложное чувство безопасности приводит к невнимательности, невнимательность приводит к смерти.
Единственная польза константных ссылок — это если наоборот ты кому-то что-то даёшь.
То, что тебе дали объект по константной ссылке, вовсе не означает что ты можешь его себе куда-то сохранить (а иначе зачем ты его менял бы, если б тебе его по неконстантной ссылке дали?), ибо его истенный владелец может с ним сделать непредсказуемое, у него-то ссылка неконстантная.Ну вот, что значит не работают. Они делают ровно то, что должны - мешают ТЕБЕ изменить состояние объекта. Почему они должны мешать кому-то другому? Если требуется что-то другое - надо использовать другие методы. Но со своей целью константные ссылки вполне справляются
Здесь обсуждают, как константные ссылки мешают менять объекты тем, кому не рассказали про const_cast, или я опять чего-то не понимаю?
Подозреваю, что понятие "оптимизации" тебе не очень знакомо.Первое правило оптимизации: не оптимизируй.
Оставить комментарий
istran
Я тут решил взботнуть Java. Начиналось все нормально. Купил книжку, стал читать по-порядку. Радовался отсутствию заебов с ручным управлением памятью, немногочисленности стандартных типов и тому как четко они определены, богатству стандартной библиотеки. Но как-то меня смущало, что нигде не встречаются неизменяемые ссылки, а прочитал я уже достаточно. Я решил прояснить этот вопрос, полез в интернет, и понял что в легендарной Java нет константных ссылок. То есть вообще нихуя. Вместо этого предлагается для каждого класса хуярить immutable интерфейс и оборачивать объекты в него. Java профессионалы, расскажите, вы реально для каждого класса делаете такой интерфейс? Или возвращаете из методов голые объекты в надежде, что их никто не изменит? Или есть еще какая-то, неизвестная мне, опция?