一次抛出多个相同类型的异常

时间:2018-11-13 02:09:18

标签: java exception exception-handling

我的目的是一次抛出两个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 :(得分:3)

如果您要检查可能的问题列表,并且需要报告所有所有问题,那么这样做可能会更整洁:

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));
}

实际上,这与其他答案/评论所提出的相同,但是对于更复杂的情况,这种方法更加简洁/整洁。

答案 1 :(得分:1)

那是不可能的。而是测试您想要的条件。喜欢,

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
}

答案 2 :(得分:0)

您永远不能一次抛出多个异常,因为它们会中断执行。您可以单独测试每个可能的问题,并在末尾抛出异常,其中包含每个失败的测试,并以易于解析的方式将其分隔开(此处最好使用逗号)。