Sobes.tech
Назад к вопросам
Junior — Middle
70

Каким образом реализовать неизменяемость объекта пользователя, который содержит свойства и коллекцию вложенных объектов?

Компании, где спрашивали
СБЕР КорпусСБЕР Корпус

Ответ от нейросети

sobes.tech AI

Чтобы сделать объект пользователя в Java неизменяемым, нужно:

  1. Объявить класс как final или не предоставлять методы для наследования.
  2. Сделать все поля private final.
  3. Не предоставлять сеттеры.
  4. Для коллекций и вложенных объектов использовать неизменяемые структуры или создавать глубокие копии при передаче в конструктор и при возврате из геттеров.

Пример:

import java.util.Collections;
import java.util.List;

public final class User {
    private final String name;
    private final List<Address> addresses;

    public User(String name, List<Address> addresses) {
        this.name = name;
        // Создаем неизменяемую копию списка
        this.addresses = Collections.unmodifiableList(
            List.copyOf(addresses));
    }

    public String getName() {
        return name;
    }

    public List<Address> getAddresses() {
        return addresses;
    }
}

final class Address {
    private final String city;

    public Address(String city) {
        this.city = city;
    }

    public String getCity() {
        return city;
    }
}

Таким образом, ни поля, ни вложенные объекты не могут быть изменены после создания объекта User.