Sobes.tech
Junior — Middle
120

Bir kullanıcı nesnesinin, özellikler ve iç içe geçmiş nesle koleksiyonu içeriyorsa, bunun değişmezliğini nasıl sağlayabilirsiniz?

Sorulan şirketler
СБЕР КорпусСБЕР Корпус

AI'dan gelen yanıt

sobes.tech yapay zeka

Чтобы сделать объект пользователя в 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.