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

таким образом, в Java, первая строка конструктор должен быть вызов супер... будь то неявного вызова super(), или явного вызова другого конструктора. То, что я хочу знать, почему я не могу положить блока try вокруг?

в Моем конкретном случае заключается в том, что у меня есть класс-макет для тестирования. Нет конструктора по умолчанию, но я хочу одного, чтобы сделать тесты проще для чтения. Я также хочу, чтобы обернуть исключений из конструктора в 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-позвольте мне сделать бывшей?


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

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

Найдено 5 ответов:

Why can't I use a try block around my super() call?

http://stackoverflow.com/questions/5328/why-cant-i-use-a-try-block-around-my-super-call

Посмотреть решение →