Добавьте checked-исключение PerimeterCalculationException в контракт perimeter(). Реализация проверяет параметры фигуры, а вызывающий код обрабатывает ошибку через catch.
Внедрение обработки исключений при вычислении периметра фигур
Добавьте checked-исключение PerimeterCalculationException в контракт perimeter(). Реализация проверяет параметры фигуры, а вызывающий код обрабатывает ошибку через catch.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
- Расширить контракт
GeometryLibrary, чтобы он позволял получать периметр любой геометрической фигуры. - Сконструировать собственный тип исключения для ситуаций, когда вычисление периметра невозможно.
- Обеспечить возможность перехвата и обработки этого исключения со стороны вызывающего кода.
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 как универсальный признак ошибки неоднозначно.