Как защитить инициализацию банкомата от произвольных номиналов купюр в `Map<Integer, Integer>`?

Проверяйте каждый номинал по разрешённому набору выбранной валюты, а количество — на неотрицательность. Map<Integer, Integer> сама по себе не ограничивает допустимые значения.

Короткий ответ

Что ответить на собеседовании

Проверяйте каждый номинал по разрешённому набору выбранной валюты, а количество — на неотрицательность. Map<Integer, Integer> сама по себе не ограничивает допустимые значения.

Подробный разбор

Ответ с пояснениями

Проверяйте каждый номинал по разрешённому набору выбранной валюты, а количество — на неотрицательность. Map<Integer, Integer> сама по себе не ограничивает допустимые значения.

Неизвестную валюту, null и неподдерживаемый номинал отклоняют до изменения состояния. Можно использовать enum или тип Denomination, но внешние данные всё равно требуют валидации. Конструктор должен копировать входные коллекции, иначе вызывающий код изменит остатки после проверки. Для операций выдачи нужны отдельные проверки точной суммы и атомарного списания.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее