Внедрение обработки исключений при вычислении периметра фигур

Добавьте checked-исключение PerimeterCalculationException в контракт perimeter(). Реализация проверяет параметры фигуры, а вызывающий код обрабатывает ошибку через catch.

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

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

Добавьте checked-исключение PerimeterCalculationException в контракт perimeter(). Реализация проверяет параметры фигуры, а вызывающий код обрабатывает ошибку через catch.

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

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

Условие

  1. Расширить контракт GeometryLibrary, чтобы он позволял получать периметр любой геометрической фигуры.
  2. Сконструировать собственный тип исключения для ситуаций, когда вычисление периметра невозможно.
  3. Обеспечить возможность перехвата и обработки этого исключения со стороны вызывающего кода.
interface GeometryLibrary {
    double perimeter();
}

class SquareGeometryLibraryImpl implements GeometryLibrary {
    @Override
    public double perimeter() {
        return 0;
    }
}
public class JetbulbInterview {
    public static void main(String[] args) {
        GeometryLibrary shapeCalc = new SquareGeometryLibraryImpl();
        try {
            double perim = shapeCalc.perimeter();
        } catch (PerimeterCalculationException e) {
            // обработка ошибки
        }
    }
}

Ответ

Добавьте checked-исключение PerimeterCalculationException в контракт perimeter(). Реализация проверяет параметры фигуры, а вызывающий код обрабатывает ошибку через catch.

class PerimeterCalculationException extends Exception {
    PerimeterCalculationException(String message) { super(message); }
}
interface GeometryLibrary {
    double perimeter() throws PerimeterCalculationException;
}
class SquareGeometryLibraryImpl implements GeometryLibrary {
    private final double side;
    SquareGeometryLibraryImpl(double side) { this.side = side; }
    public double perimeter() throws PerimeterCalculationException {
        double result = 4 * side;
        if (!Double.isFinite(side) || side <= 0 || !Double.isFinite(result))
            throw new PerimeterCalculationException("Invalid side");
        return result;
    }
}

Создание в main заменяется на new SquareGeometryLibraryImpl(5). Для других фигур контракт тот же, а необходимые параметры и проверка определяются реализацией. Возвращать 0 как универсальный признак ошибки неоднозначно.

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

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

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

Подробнее