我的目的是一次抛出两个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
。
如何抛出多个(相同类型的)异常?还是我的方法被误导了,我应该以不同的方式去做吗?
答案 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)
您永远不能一次抛出多个异常,因为它们会中断执行。您可以单独测试每个可能的问题,并在末尾抛出异常,其中包含每个失败的测试,并以易于解析的方式将其分隔开(此处最好使用逗号)。