Вернуть значение И сгенерировать исключение? - PullRequest
21 голосов
/ 28 августа 2011

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

Ответы [ 3 ]

28 голосов
/ 28 августа 2011

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

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

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

20 голосов
/ 28 августа 2011

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

public class ValueException extends Exception {
    final boolean value;

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

    public boolean getValue() {
        return value;   
    }
}
0 голосов
/ 01 июля 2014

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...