Это немного старый вопрос, но я подумал, что все равно внесу свои 2 цента, так как эта тема возникла сегодня в разговоре.
Это не совсем ответ, почему нет const? но как сделать ваши классы неизменными. (К сожалению, у меня еще недостаточно репутации, чтобы оставлять комментарии к принятому ответу)
Чтобы гарантировать неизменяемость объекта, нужно более тщательно проектировать классы, чтобы они были неизменяемыми. Это требует немного большей осторожности, чем изменяемый класс.
Это восходит к книге Джоша Блоха « Эффективный элемент Java 15 - Минимизируйте изменчивость» . Если вы не читали книгу, возьмите копию и перечитайте ее несколько раз, я гарантирую, что она улучшит вашу образную «java игру» .
В пункте 15 Блох предлагает ограничить изменчивость классов, чтобы гарантировать состояние объекта.
Чтобы процитировать книгу напрямую:
Неизменяемый класс - это просто класс, экземпляры которого нельзя изменить. Вся информация, содержащаяся в каждом экземпляре, предоставляется при его создании и фиксируется на время существования объекта. Библиотеки платформы Java содержат множество неизменяемых классов, включая String, упакованные примитивные классы, а также BigInteger и BigDecimal. Для этого есть много веских причин: неизменяемые классы проще разрабатывать, реализовывать и использовать, чем изменяемые классы. Они менее подвержены ошибкам и более безопасны.
Затем Блох описывает, как сделать ваши классы неизменяемыми, следуя 5 простым правилам:
- Не предоставляйте никаких методов, которые изменяют состояние объекта (например, сеттеры, они же мутаторы )
- Убедитесь, что класс не может быть расширен (это означает объявление самого класса как
final
).
- Сделайте все поля
final
.
- Сделайте все поля
private
.
- Обеспечьте монопольный доступ ко всем изменяемым компонентам. (делая защитные копии объектов)
Для получения более подробной информации я настоятельно рекомендую взять копию книги.
const
ключевое слово, но не основная функция. Соответственно исправлены заголовок и теги.