Вообще говоря, чем больше я использую неизменных объектов в Java, тем больше я думаю, что это отличная идея.У них есть много преимуществ от автоматического обеспечения многопоточности до того, что не нужно беспокоиться о клонировании или копировании конструкторов.
Это заставило меня задуматься, не сработает ли "неизменное" ключевое слово?Очевидно, что есть недостатки в добавлении другого зарезервированного слова в язык, и я сомневаюсь, что это действительно произойдет в первую очередь по вышеуказанной причине - но игнорируя тот факт, что я не вижу многих недостатков.
В настоящее время большая осторожность должнабыть взятым, чтобы удостовериться, что объекты являются неизменяемыми, и даже тогда изворотливый комментарий Javadoc, утверждающий, что компонентный объект является неизменным, когда он фактически не может разрушить все это.Также есть аргумент, что даже базовые объекты, такие как string, не являются действительно неизменяемыми, потому что они легко уязвимы для атак отражением.
Если бы у нас было неизменное ключевое слово, компилятор наверняка рекурсивно проверил бы и дал бы железную гарантию, чтовсе экземпляры класса были неизменными, что сейчас невозможно сделать.Особенно с учетом того, что параллелизм становится все более и более популярным, я лично считаю, что было бы хорошо добавить ключевое слово для этого.Но есть ли какие-то недостатки или детали реализации, которые я упускаю, что делает это плохой идеей?