Обнаружить дефекты в коде без выполнения класса Runner

Поле computers не инициализировано, поэтому первый sellComputer() выбросит NullPointerException на size(). Метод buyComputers пуст и не пополняет запас; Runner покупку товара до продажи не выполняет.

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

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

Поле computers не инициализировано, поэтому первый sellComputer() выбросит NullPointerException на size(). Метод buyComputers пуст и не пополняет запас; Runner покупку товара до продажи не выполняет.

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

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

Условие

В проекте присутствуют два класса — Runner и ComputerShop. Требуется проанализировать их исходники и выявить потенциальные проблемы, не запуская метод main класса Runner.

public class Runner {
    public static void main(String[] args) {
        ComputerShop computerShop = new ComputerShop();
        PhoneShop phoneShop = new PhoneShop();

        Computer computer = computerShop.sellComputer();
        Phone phone = phoneShop.sellPhone();

        computer.start();
        phone.call();
    }
}
public class ComputerShop {
    private List<Computer> computers;

    public void buyComputers(List<Computer> computers) {
    }

    public Computer sellComputer() {
        if (computers.size() == 0) {
            throw new RuntimeException("Компьютеры проданы!");
        }
        return computers.remove(0);
    }
}

Ответ

Поле computers не инициализировано, поэтому первый sellComputer() выбросит NullPointerException на size(). Метод buyComputers пуст и не пополняет запас; Runner покупку товара до продажи не выполняет.

Инициализируйте внутреннюю коллекцию в конструкторе или поле, а buyComputers реализуйте через проверку входа и добавление элементов, без сохранения чужого изменяемого списка. Пустой магазин должен возвращать явно оговорённую ошибку отсутствия товара, а не null. Для FIFO-продаж удобна ArrayDeque, поскольку удаление начала ArrayList сдвигает остальные элементы. PhoneShop, Computer и Phone в условии не показаны, поэтому конкретные дефекты их методов установить нельзя. Потокобезопасность нужна лишь при конкурентном доступе.

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

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

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

Подробнее