Назад к вопросам
МТС
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.