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