Sobes.tech
Назад к вопросам
Middle+
3

Как сделать свой класс неизменяемым для использования в качестве ключа HashMap?

Компании, где спрашивали
МТСМТС

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

sobes.tech AI

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

  • Сделать все поля final и private.
  • Не предоставлять сеттеры.
  • Инициализировать все поля через конструктор.
  • Если поля — изменяемые объекты, создавать их копии при присваивании и при возврате (защищать от внешних изменений).
  • Переопределить методы equals() и hashCode() корректно, основываясь на полях.

Пример:

public final class ImmutableKey {
    private final String id;
    private final int number;

    public ImmutableKey(String id, int number) {
        this.id = id;
        this.number = number;
    }

    public String getId() {
        return id;
    }

    public int getNumber() {
        return number;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof ImmutableKey)) return false;
        ImmutableKey that = (ImmutableKey) o;
        return number == that.number && id.equals(that.id);
    }

    @Override
    public int hashCode() {
        return Objects.hash(id, number);
    }
}

Такой класс гарантирует, что после создания объект не изменится, и его хэш-код останется постоянным, что критично для ключей в HashMap.