gpt4 book ai didi

java - 如何避免使用多个 throw 语句并仅使用一个带有所需错误消息的通用 throw 语句

转载 作者:行者123 更新时间:2023-12-01 17:45:33 26 4
gpt4 key购买 nike

我有一个验证输入字符串的代码,如果输入字符串与所需的格式不匹配,我需要抛出 IllegalArgumentException,有多个字段,每个字段都有一组不同的验证条件,因此对于当前我正在执行的每个字段“If”检查,如果不满足,我将抛出 IllegalArgumentException,并且相应字段有多个 if 条件,并且每个 IllegalArgumentException 都有不同的要打印的消息。

我正在寻找更通用的方法/重构,我可以仅抛出一次 IllegalArgumentException 并提供无效条件所需的错误消息。

我可以想到一种情况,我可以创建变量 errorMeaage 并在其中存储错误消息,最后,如果变量 errorMeaage 不为空我可以抛出 IllegalArgumentException 和所需的消息,但这并不能说服我。

当前代码:

package Miscellanious;

public class ValidationMain {

public static void main(String args[]) {

ValidationMain obj = new ValidationMain();
obj.validate("Sam", "Rock", "Turner");
}

public void validate(String firstName, String middleName, String lastName) {

if (firstName != null && !firstName.matches("^[a-zA-Z`’ -]{1,50}$")) {
throw new IllegalArgumentException("Invalid value for firstName field from Input Parameter");
}


if (middleName != null && !middleName.matches("^[a-zA-Z.`’ -]{0,50}$")) {
throw new IllegalArgumentException("Invalid value for middleName field from Input Parameter");
}

if (lastName != null && !lastName.matches("^[a-zA-Z`’ -]{2,50}$")) {
throw new IllegalArgumentException("Invalid value for lastName field from Input Parameter");
}

System.out.println(firstName + " " + middleName + " " + lastName);
}

}

我可以想到像下面这样的东西,但它似乎会覆盖以前的错误并且没有太多说服力

public void validate(String firstName, String middleName, String lastName) {

String errorMessage = null ;

if (firstName != null && !firstName.matches("^[a-zA-Z`’ -]{1,50}$")) {
errorMessage = "Invalid value for firstName field from Input Parameter";
}


if (middleName != null && !middleName.matches("^[a-zA-Z.`’ -]{0,50}$")) {
errorMessage = "Invalid value for middleName field from Input Parameter";
}

if (lastName != null && !lastName.matches("^[a-zA-Z`’ -]{2,50}$")) {
errorMessage = "Invalid value for lastName field from Input Parameter";
}

if (errorMessage != null){

throw new IllegalArgumentException("Error Message :" + errorMessage);
}

System.out.println(firstName + " " + middleName + " " + lastName);
}

最佳答案

您可以做的一件事是将 if 检查提取到一个单独的方法,您可以使用输入、正则表达式和消息调用该方法:

private void validateInput(String input, String regex, String message) {
if (input != null && !input.matches(regex)) {
throw new IllegalArgumentException("Error Message :" + message);
}
}

public void validate(String firstName, String middleName, String lastName) {
this.validateInput(firstName, "^[a-zA-Z`’ -]{1,50}$",
"Invalid value for firstName field from Input Parameter");
this.validateInput(middleName, "^[a-zA-Z.`’ -]{0,50}$",
"Invalid value for middleName field from Input Parameter");
this.validateInput(lastName, "^[a-zA-Z`’ -]{2,50}$",
"Invalid value for lastName field from Input Parameter");
}

关于java - 如何避免使用多个 throw 语句并仅使用一个带有所需错误消息的通用 throw 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55843205/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com