6:37 потому что могут быть потери копеек, а при финансах это критично, это проблема двоичной системы счисления. Проще хранить в long или BigDecimal. Не знаю зачем смотрю это видео и пишу комментарий) ведь я это все знаю), наверное для продвижения канала, потому такой комментарий длинный😅
Спасибо за видео. Но не могу понять зачем нам создавать копию объекта в конструкторе вместо того чтобы просто присвоить значение? Суть в том что, на момент присвоения значения в конструкторе, еще нет никакого состояния объекта, так что же мы можем защитить? Это все равно что вместо того что бы просто положить письмо в конвер и заклеить, сделав его неизменяемым, мы сначала перепишем письмо на новый лист и только потом положим копию в конверт. Попавьте если не прав. P.S. Написал и понял что таким образом икслючается возможность модификации значения если в конструктор передаётся ссылка на объект, а состояние такого обьекта можно изменять извне. Еще раз спасибо ))
Мы создаем Immutable Class, одна из ключевых задач - защитить внутреннее состояние объекта от изменений. Если мы не будем возвращать копию объекта в get методах (в случае коллекций или изменяемых объектов), то это может привести к уязвимости, так как внутреннее состояние объекта может быть изменено извне 😏
@@ElenaCodes так мы изначально даём создать только через конструктор, в конструкторе в поле мы инжектим копию сразу, а затем даём доступ к этой самой копии через геттер. Изменения листа или мутабельного класса не повлияют на наш класс, так как в нем уже копия при создании, а меняется как бы слепок от копии, который не имеет отношение к нашему классу! Копия с копии в геттере как будто бы избыточна?
@@ElenaCodes сами попробуйте. Сделайте дефенсив копию в конструкторе и сделайте классический геттер. И попробуйте любым образов изменить поле где лист в нашем классе)
@@alexandr6055 что-то усложнили вы со слепками от копии) 1) defensive copying в конструкторе не позволяет влиять «извне» на состояние экземпляра через параметр, который был передан 2) defensive copying в get методе не позволяет изменить состояние вашего объекта через параметр, который вы через return отправите во «внешний» мир Мы защищаем состояние объекта, а не тот параметр, который пришел к нам извне в конструктор 😇
@@ElenaCodes наоборот это вы усложнили. Оставьте в вашем классе конструктор таким как вы его написали. И удалите геттер на лист с деф. копией. Сделайте простой классический геттер, который просто ретёрн лист. Затем попробуйте изменить лист как угодно. Проверьте ваш Immutable class: его поле лист останется неизменным 😁
Да, хорошее замечание) Как и любой инструмент, их следует использовать осознанно и в тех ситуациях, где их преимущества перевешивают возможные потери в производительности
Лена, ты ТОП! Обожаю тебя и твои уроки! Спасибо!
В очередей раз смотрю видео и узнаю от вас что-то новое!)) спасибо вам, Елена!))
❤
Очень приятная подача материала, красивое аккуратное оформление и тема раскрыта полностью. Пожалуйста не останавливайтесь❤
Спасибо)) 😉
Очень полезное видео! Благодарю, Елена
6:37 потому что могут быть потери копеек, а при финансах это критично, это проблема двоичной системы счисления. Проще хранить в long или BigDecimal. Не знаю зачем смотрю это видео и пишу комментарий) ведь я это все знаю), наверное для продвижения канала, потому такой комментарий длинный😅
Спасибо большое за ваш комментарий ❤️
хорошое, видео!
Очень интересно
Офигенная подача материала!
Спасибо за видео. Омск рулит!
Спасибо за видео. Но не могу понять зачем нам создавать копию объекта в конструкторе вместо того чтобы просто присвоить значение? Суть в том что, на момент присвоения значения в конструкторе, еще нет никакого состояния объекта, так что же мы можем защитить? Это все равно что вместо того что бы просто положить письмо в конвер и заклеить, сделав его неизменяемым, мы сначала перепишем письмо на новый лист и только потом положим копию в конверт. Попавьте если не прав.
P.S. Написал и понял что таким образом икслючается возможность модификации значения если в конструктор передаётся ссылка на объект, а состояние такого обьекта можно изменять извне. Еще раз спасибо ))
Спасибо огромное за труд!🌷А что за картина интересная на диване?👀
мое творчество)
@@ElenaCodes Очень необычно😍
Лучшая!
😏
Лен, можно попросить видео про функциональные интерфейсы?) спасибо
Спасибо за предложение темы, посмотрим 😉
Как часто теперь выходить в видео?) вы заранее пишите, что нам ждать, пол года ждал, что-то долго )))
Ахахах)) надеюсь на адекватный ритм 1-2 видео в 2 недели)) 😎 посмотрим
@@ElenaCodes будем ждать)
Я так полагаю double не рекомендуется из-за неточности в арифметических операциях .
Интересный канал,только узнал о нем. Можно ли как-то поговорить с автором лично, если это возможно?
Спасибо! Связаться со мной можно по почте: info@oshkina.ru
а какая может быть уязвимость, если мы геттер не будем менять? Ведь в поле класса уже установлена копия переданного в конструктор значения?
Мы создаем Immutable Class, одна из ключевых задач - защитить внутреннее состояние объекта от изменений. Если мы не будем возвращать копию объекта в get методах (в случае коллекций или изменяемых объектов), то это может привести к уязвимости, так как внутреннее состояние объекта может быть изменено извне 😏
@@ElenaCodes так мы изначально даём создать только через конструктор, в конструкторе в поле мы инжектим копию сразу, а затем даём доступ к этой самой копии через геттер. Изменения листа или мутабельного класса не повлияют на наш класс, так как в нем уже копия при создании, а меняется как бы слепок от копии, который не имеет отношение к нашему классу! Копия с копии в геттере как будто бы избыточна?
@@ElenaCodes сами попробуйте. Сделайте дефенсив копию в конструкторе и сделайте классический геттер. И попробуйте любым образов изменить поле где лист в нашем классе)
@@alexandr6055 что-то усложнили вы со слепками от копии)
1) defensive copying в конструкторе не позволяет влиять «извне» на состояние экземпляра через параметр, который был передан
2) defensive copying в get методе не позволяет изменить состояние вашего объекта через параметр, который вы через return отправите во «внешний» мир
Мы защищаем состояние объекта, а не тот параметр, который пришел к нам извне в конструктор 😇
@@ElenaCodes наоборот это вы усложнили. Оставьте в вашем классе конструктор таким как вы его написали. И удалите геттер на лист с деф. копией. Сделайте простой классический геттер, который просто ретёрн лист. Затем попробуйте изменить лист как угодно. Проверьте ваш Immutable class: его поле лист останется неизменным 😁
Добрый день. Почему так редко видео, раз в 4 месяца?
Были студенты в университете и основная работа) а в сутках всего 24 часа 😏
@@ElenaCodes а где работаете, если не секрет?
Иннотех - одна из компаний холдинга Т1
ну или просто использовать record)
Immutable class - это просто минус 500 к производительности. Это инструмент, не волшебная палочка.
Да, хорошее замечание) Как и любой инструмент, их следует использовать осознанно и в тех ситуациях, где их преимущества перевешивают возможные потери в производительности