Ідеальний старт для майбутніх IT-розробників 👨‍💻 зі знижкою до 65%!
Дізнатися більше
21.03.2025
5 хвилин читання

Immutable об’єкти у Java: що це і як їх створити?

Immutable (незмінні) об’єкти відіграють важливу роль у програмуванні, оскільки вони допомагають уникати помилок, пов’язаних зі зміною стану об’єктів, а також роблять код більш передбачуваним і безпечним для багатопотокових програм.

Уявіть, що у вас є банківська картка: номер картки, ім’я власника та термін дії залишаються незмінними після випуску. Якщо вам потрібно оновити якусь інформацію, доведеться отримати нову картку. Так само працюють immutable об’єкти у Java: після створення вони більше не змінюються.

Хочете опанувати професію Java Developer? Приєднуйтесь до програми “Від 0 до Strong Java Junior за 12 місяців”. Скористайтеся вигідною пропозицією від FoxmindEd!
Зареєструватись

Immutable об’єкти у Java

Immutable (незмінний) об’єкт — це об’єкт, стан якого не можна змінити після створення. Якщо потрібно змінити його дані, створюється новий об’єкт з оновленими значеннями.

У Java типовим прикладом immutable класу є String:

String str1 = "Hello";

String str2 = str1.concat(" World"); // створюється новий об'єкт

System.out.println(str1); // "Hello"

System.out.println(str2); // "Hello World"

Метод concat() не змінює сам str1, а створює новий рядок. Це і є ключова ідея immutable об’єктів.

Особливості immutable об’єктів

  •  Потокобезпечність: Immutable об’єкти не змінюються, тому їх можна безпечно використовувати в багатопотоковому середовищі без необхідності синхронізації.
  • Використання у хеш-таблицях: Оскільки hashCode() у immutable об’єкта завжди залишається незмінним, такі об’єкти ідеально підходять для використання у ключах HashMap або HashSet.
  • Оптимізація кешування (String pool): Клас String у Java використовує пул рядків для зменшення кількості створюваних об’єктів і підвищення продуктивності.

Як створити immutable об’єкт у Java?

Щоб створити immutable об’єкт у Java, потрібно дотримуватись кількох принципів:

  1. Оголосити клас як final, щоб його не можна було успадкувати.
  2. Зробити всі поля private та final, щоб їх не можна було змінити після ініціалізації.
  3. Не надавати сетери (set-методи), щоб заборонити зміну полів після створення об’єкта.
  4. Ініціалізувати всі поля в конструкторі.
  5. Забезпечити, що mutable об’єкти всередині класу не змінюються (якщо є масиви чи списки, повертати їх копії).
public final class Person {

   private final String name;

   private final int age;

   public Person(String name, int age) {

       this.name = name;

       this.age = age;

   }

   public String getName() {

       return name;

   }

   public int getAge() {

       return age;

   }

}

Використання записів (Records) у Java

З Java 14 з’явився новий тип класів — records, які автоматично створюють immutable об’єкти. Вони спрощують створення класів, які містять лише дані.

public record Person(String name, int age) {

}

Що змінилося?

Коротший код – тепер немає необхідності явно писати конструктор, гетери та final модифікатори. В record все це робиться автоматично, так само як генерація toString(), equals(), hashCode() методів.

Приклад використання:

public class Main {

   public static void main(String[] args) {

       Person person = new Person("Anastasia", 42);

       System.out.println(person); // -> Person[name=Anastasia, age=42]

       System.out.println(person.name()); // -> Anastasia

       System.out.println(person.age());  // -> 42

   }

 }

Тож якщо клас використовується лише для зберігання даних, то record – чудова альтернатива.

Підпишіться на наш Ютуб-канал! Корисні відео для програмістів чекають на вас! YouTube
Оберіть свій курс програмування! Шлях до кар’єри програміста починається тут! Подивитись

Підсумок

Immutable об’єкти у Java — це об’єкти, які не можна змінити після створення. Вони забезпечують безпечніший, передбачуваний і стабільний код, що особливо важливо у багатопотокових додатках.

Основні принципи створення immutable об’єктів:

  • final клас (щоб запобігти успадкуванню)
  • private final поля (щоб уникнути змін)
  • Ініціалізація полів через конструктор
  • відсутність сеттерів

Завдяки Java Records, створювати immutable об’єкти стало ще простіше. Record автоматично генерує всі необхідні методи, зменшуючи код і роблячи його читабельнішим.

Коли варто використовувати immutable об’єкти?

  • У багатопотокових програмах – немає ризику неконтрольованих змін.
  • Для об’єктів, що слугують ключами у HashMap або HashSet – стабільність hashCode() та equals().
  • Як DTO (Data Transfer Object) – коли об’єкти потрібні лише для передачі даних.
    Як значення у кешах – оскільки immutable об’єкти не змінюються, вони добре підходять для кешування.

Якщо ви хочете детальніше вивчити Java, зверніть увагу на навчальний центр FoxmindEd, де ви знайдете структуровані курси та досвідчених викладачів.

FAQ
Що таке immutable об'єкт у Java?

Immutable об'єкт – це об'єкт, стан якого не можна змінити після створення.

Навіщо використовувати immutable об'єкти?

Вони підвищують безпеку в багатопотокових програмах, забезпечують стабільність hashCode() та спрощують кешування.

Як створити immutable клас у Java?

Оголосити клас як final, зробити всі поля private final, ініціалізувати їх у конструкторі та не надавати сетери.

Чому String є immutable?

Будь-які операції зміни рядка створюють новий об'єкт, що запобігає небажаним модифікаціям.

Що таке Java Records?

Це спеціальні класи для збереження даних, які автоматично створюють конструктор, гетери та методи equals() і hashCode().

Коли варто використовувати immutable об'єкти?

У багатопотокових програмах, для ключів у HashMap, як DTO та для кешування даних.

Хочете дізнатися більше про Immutable об'єкти у Java? Поставте своє запитання в коментарях нижче! 🤔👇

Додати коментар

Ваш імейл не буде опубліковано. Обов'язкові поля відзначені *

Зберегти моє ім'я, імейл та адресу сайту у цьому браузері для майбутніх коментарів