[java] Как жить без константных ссылок

istran

Я тут решил взботнуть Java. Начиналось все нормально. Купил книжку, стал читать по-порядку. Радовался отсутствию заебов с ручным управлением памятью, немногочисленности стандартных типов и тому как четко они определены, богатству стандартной библиотеки. Но как-то меня смущало, что нигде не встречаются неизменяемые ссылки, а прочитал я уже достаточно. Я решил прояснить этот вопрос, полез в интернет, и понял что в легендарной Java нет константных ссылок. То есть вообще нихуя. Вместо этого предлагается для каждого класса хуярить immutable интерфейс и оборачивать объекты в него. Java профессионалы, расскажите, вы реально для каждого класса делаете такой интерфейс? Или возвращаете из методов голые объекты в надежде, что их никто не изменит? Или есть еще какая-то, неизвестная мне, опция?

zorin29

В C# тоже нет константных ссылок. Где-то на StackOverflow я читал пламенный пост о том, что они не нужны потому, что не работают, но сейчас не могу его найти...
Как я понимаю, нужны или не нужны константные ссылки - это одна из тем священных войн. Я пишу на C#, и если мне важна immutability, использую интерфейсы. Это больше кода, но Java вообще очень многословный язык, так что привыкай :)

yroslavasako

смотри scala, там есть val.

schipuchka1

есть Unmodifiable обёртки, можно их использовать

6yrop

Или возвращаете из методов голые объекты в надежде, что их никто не изменит?
что ты подразумеваешь под изменением объекта? изменение его филдов?

luna89

Java профессионалы, расскажите, вы реально для каждого класса делаете такой интерфейс?
Нет.
Или возвращаете из методов голые объекты в надежде, что их никто не изменит?
Да.

istran

Вызов методов, которые изменяют состояние объекта.

soroka000

Все больше и больше прихожу к выводу, что разработчики С++ склонны к БДСМ.
Ну какой смысл от самого себя что-то закрывать?
От внедрения в память процесса конст ссылки не спасают (и не должны).
А если разработчик криворукий мудак и не знает, что изменять объект, переданный по ссылке нельзя (доку не прочитал, или просто не в курсе что код делает), то пусть джамшутит в быдлоконторах и утопает в дебаге. Для таких приготовлено особое место в аду.

iravik

Ну какой смысл от самого себя что-то закрывать?
бывает такое, что пользуешься чужими библиотеками

Whoman-in-white

Складно поешь, оказывается читать доку ( в лучшем случае) и разбираться в чужом коде (в худшем) гораздо удобней, чем посмотреть, константна ли ссылка на объект.
А, и еще от случайных ошибок и опечаток доки страхуют гораздо лучше, чем константость ссылки.

apl13

Ну какой смысл от самого себя что-то закрывать?
Подозреваю, что понятие "оптимизации" тебе не очень знакомо.
Ну, правда, это если не к вопросу о "что-то закрывать", а по теме треда. :)

Dasar

От внедрения в память процесса конст ссылки не спасают (и не должны).
на андройде спасают. И на любой другой замкнутой песочнице тоже будут спасать.

bleyman

Складно поешь, оказывается читать доку ( в лучшем случае) и разбираться в чужом коде (в худшем) гораздо удобней, чем посмотреть, константна ли ссылка на объект.
Проблема в том, что, как упомянуто выше, константные ссылки не работают™. То, что тебе дали объект по константной ссылке, вовсе не означает что ты можешь его себе куда-то сохранить (а иначе зачем ты его менял бы, если б тебе его по неконстантной ссылке дали?), ибо его истенный владелец может с ним сделать непредсказуемое, у него-то ссылка неконстантная. Так что лучше делай полную иммутабельность, полумеры дают ложное чувство безопасности, ложное чувство безопасности приводит к невнимательности, невнимательность приводит к смерти.
Единственная польза константных ссылок — это если наоборот ты кому-то что-то даёшь.

Whoman-in-white

То, что тебе дали объект по константной ссылке, вовсе не означает что ты можешь его себе куда-то сохранить (а иначе зачем ты его менял бы, если б тебе его по неконстантной ссылке дали?), ибо его истенный владелец может с ним сделать непредсказуемое, у него-то ссылка неконстантная.
Ну вот, что значит не работают. Они делают ровно то, что должны - мешают ТЕБЕ изменить состояние объекта. Почему они должны мешать кому-то другому? Если требуется что-то другое - надо использовать другие методы. Но со своей целью константные ссылки вполне справляются

apl13

Гм.
Здесь обсуждают, как константные ссылки мешают менять объекты тем, кому не рассказали про const_cast, или я опять чего-то не понимаю?

soroka000

Подозреваю, что понятие "оптимизации" тебе не очень знакомо.
Первое правило оптимизации: не оптимизируй.

apl13

Оставить комментарий
Имя или ник:
Комментарий: