Подтвердить что ты не робот

Возвращает значение И выдает исключение?

Я работаю с API, который утверждает, что возвращает true, если он преуспевает, и false, если он терпит неудачу. Но, он также утверждает, что бросает разные исключения, если он терпит неудачу. Как он может вернуть false и выдать исключение?

4b9b3361

Ответ 1

Невозможно обойти исключение и вернуть значение из одного вызова функции.

Возможно, что-то вроде возврата false, если есть ошибка, но выбрасывает исключение, если вход недействителен.

изменить: PaulPRO разместил (теперь удален) ответ, указывающий на то, что это технически возможно, чтобы вызвать исключение быть выброшено в другом потоке, в то время как возвращая значение в текущем. Я думал, это стоит отметить, даже если это не то, что вы когда-либо видели.

Ответ 2

Вы можете создать исключение, имеющее (в данном случае логическое) значение:

public class ValueException extends Exception {
    final boolean value;

    public ValueException(boolean value, String message) {
        super(message);
        this.value = value;
    }

    public boolean getValue() {
        return value;   
    }
}

Ответ 3

В то время как вы можете написать свой код таким образом, чтобы исключение И значение могло быть получено из вызова функции (см. вышеупомянутые сообщения), оно НИКОГДА не должно выполняться в правильном кодировании.

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

Помните, что try/catch блоки - это ДРУГОЙ метод обработки исключений. Они не передают исключение из вызывающего метода, но обрабатывают его внутренне таким образом, который разработчик сочтет подходящим.

Если для целей отладки вам нужно увидеть результирующее значение в случае исключения, то чешская идея хорошо работает.