Immutable Classes (неизменяемые классы)
Неизменяемость — это характеристика объектов Java, которая делает их неизменными для будущих изменений после их инициализации. Его внутреннее состояние невозможно никак изменить. Чтобы изменить состояние, мы должны создать новую копию такого объекта с предполагаемыми изменениями.
Рассмотрим класс java.lang.String, который является неизменяемым классом. После создания строки мы не сможем изменить содержимое этой строки. Каждый общедоступный API в классе String возвращает новую строку с измененным содержимым. Исходная строка всегда остается неизменной.
Рекомендации по созданию неизменяемых классов:
🧠 Не определять сеттеров. Сеттеры предназначены для изменения состояния объекта, которое мы здесь хотим предотвратить.
🧠 Сделайте все поля final и private. Поля, объявленные private, не будут доступны за пределами класса, и если сделать их final, мы не сможем изменить их даже случайно.
🧠 Не позволяйте подклассам переопределять методы. Самый простой способ — объявить класс как final. final классы не могут быть расширены.
🧠 Особое внимание «неизменяемым классам с изменяемыми полями». Всегда помните, что поля-члены могут быть либо изменяемыми, либо неизменяемыми. Значения неизменяемых членов (примитивы, классы-обёртки, строки и т. д.) могут быть безопасно возвращены из геттеров. Для изменяемых членов (POJO, коллекций и т. д.) мы должны скопировать содержимое в новый объект перед возвратом из геттера.
Некоторые неизменяемые классы из JDK:
👉 String
👉 Integer, Long, Double и другие обёртки
👉 BigInteger, BigDecimal
👉 enum
👉 record
👉 LocalDate, LocalTime и другие классы Java 8 Date Time API
Post #222
1.71K
- 👍 14
- 🔥 5
- 🥰 3
- 👏 2
- 😁 2