Sobes.tech
Junior — Middle
121

Hogyan valósítható meg egy felhasználói objektum változatlansága, amely tulajdonságokat és beágyazott objektumokat tartalmazó kollekciót tartalmaz?

Cégeket kérdeztek
СБЕР КорпусСБЕР Корпус

Válasz az MI-től

sobes.tech MI

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