Бросать несколько исключений одного и того же типа одновременно - PullRequest
0 голосов
/ 13 ноября 2018

Мое намерение состоит в том, чтобы бросить два Exception с одновременно. Код:

    String str = "foo";

    if (str.length() < 5) {
        throw new Exception("At least 5 characters."); // exception 1
    }

    if (!str.matches(".*[0-9]+.*")) {
        throw new Exception("At least 1 digit."); // exception 2
    }

foo длиной менее 5 символов и не содержит цифр. Но когда я запускаю эту программу, выбрасывается только exception 1.

Как вывести несколько исключений (одного типа)? Или мой подход введен в заблуждение, и я должен пойти по-другому?

Ответы [ 3 ]

0 голосов
/ 13 ноября 2018

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

0 голосов
/ 13 ноября 2018

Если вы проверяете список возможных проблем, и вам необходимо сообщить о всех проблемах, то может быть лучше сделать это следующим образом:

String str = "foo";

List<String> errors = new ArrayList<>();

if (str.length() < 5) {
    errors.add("At least 5 characters."); // exception 1
}

if (!str.matches(".*[0-9]+.*")) {
    errors.add("At least 1 digit."); // exception 2
}

// Check for more stuff

if (!errors.isEmpty()) {
    throw new Exception("There are problem(s) found:\n" + String.join("\n", errors));
}

Эффективно,это то же самое, что было предложено другими ответами / комментариями, но этот подход немного чище / аккуратнее для более сложного сценария.

0 голосов
/ 13 ноября 2018

Это невозможно. Вместо этого проверьте условия, которые вы желаете. Мол,

String str = "foo";
boolean len = str.length() < 5;
boolean digit = !str.matches(".*[0-9]+.*");
if (len && digit) {
    throw new Exception("At least 5 characters and 1 digit."); // both 1 and 2
} else if (len) {
    throw new Exception("At least 5 characters."); // exception 1
} else if (digit) {
    throw new Exception("At least 1 digit."); // exception 2
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...