Найдено результатов: 2

Обеспечение того, чтобы исключения всегда перехватывались

Исключения в C++ не должны быть пойманы (без ошибок времени компиляции) вызывающей функцией. Таким образом, это зависит от решения разработчика, следует ли ловить их с помощью try/catch (в отличие от Java).

Есть ли способ гарантировать, что брошенные исключения всегда перехватываются с помощью try/catch вызывающей функцией?

c++   exception   try-catch    

514   7   16:03, 1st July, 2020


Почему я не могу использовать блок try вокруг моего вызова super()?

Итак, в Java первая строка вашего конструктора HAS должна быть вызовом super... будь то неявный вызов super() или явный вызов другого конструктора. Вот что я хочу знать: почему я не могу поставить пробный блок вокруг этого?

Мой конкретный случай заключается в том, что у меня есть макет класса для теста. Конструктора по умолчанию нет, но я хочу, чтобы он упрощал чтение тестов. Я также хочу обернуть исключения, вызванные из конструктора, в RuntimeException.

Итак, то, что я хочу сделать, это эффективно:

public class MyClassMock extends MyClass {
    public MyClassMock() {
        try {
            super(0);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    // Mocked methods
}

Но Java жалуется, что супер-это не первое утверждение.

Мой обходной путь:

public class MyClassMock extends MyClass {
    public static MyClassMock construct() {
        try {
            return new MyClassMock();
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    public MyClassMock() throws Exception {
        super(0);
    }

    // Mocked methods
}

Является ли это лучшим обходным путем? Почему Java не позволяет мне сделать первое?


Моя лучшая догадка относительно "why" заключается в том, что Java не хочет, чтобы я имел сконструированный объект в потенциально противоречивом состоянии... однако, делая глумление, я не забочусь об этом. Кажется, я должен быть в состоянии сделать это выше... или, по крайней мере, я знаю, что вышесказанное безопасно для моего случая... или кажется, что так и должно быть в любом случае.

Я переопределяю все методы, которые я использую из тестируемого класса, поэтому нет никакого риска, что я использую неинициализированные переменные.

java   exception   mocking   try-catch    

506   7   16:03, 1st July, 2020