亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何避免使用多個 throw 語句并僅使用一個帶有所需錯誤消息的通用 throw 語句

如何避免使用多個 throw 語句并僅使用一個帶有所需錯誤消息的通用 throw 語句

UYOU 2022-10-20 17:23:19
我有一個驗證輸入字符串的代碼,如果輸入字符串不匹配所需的格式,我需要拋出 IllegalArgumentException,有多個字段,每個字段都有一組不同的驗證條件,所以對于每個字段,我目前正在執行“如果”檢查如果不滿意我拋出 IllegalArgumentException 并且對應字段有多個 if 條件,并且每個 IllegalArgumentException 都有不同的消息要打印關于字段。我正在尋找更通用的方法/重構,我可以只拋出一次 IllegalArgumentException 并為無效條件提供所需的錯誤消息。我可以想到一種情況,我可以創建變量 say 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);    }}我可以想像下面這樣的東西,但它似乎會覆蓋以前的錯誤并且沒有多大說服力
查看完整描述

3 回答

?
叮當貓咪

TA貢獻1776條經驗 獲得超12個贊

您可以做的一件事是將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");

}


查看完整回答
反對 回復 2022-10-20
?
鴻蒙傳說

TA貢獻1865條經驗 獲得超7個贊

為什么不使用else if來防止消息被覆蓋?這樣代碼將在第一個匹配的條件下退出。這是假設您想堅持您的實現而不是過多地編輯代碼。


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";

    }else if (middleName != null && !middleName.matches("^[a-zA-Z.`’ -]{0,50}$")) {

        errorMessage = "Invalid value for middleName field from Input Parameter";

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

}


查看完整回答
反對 回復 2022-10-20
?
慕標5832272

TA貢獻1966條經驗 獲得超4個贊

使用你的第二個想法......


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

        String errorMessage = "Invalid value for fields %s from Input Parameter";

        StringBuffer fields = new StringBuffer();


        if (firstName != null && !firstName.matches("^[a-zA-Z`’ -]{1,50}$")) {

            fields.append("firstName");

        }



        if (middleName != null && !middleName.matches("^[a-zA-Z.`’ -]{0,50}$")) {

            fields.append(" middleName");

        }


        if (lastName != null && !lastName.matches("^[a-zA-Z`’ -]{2,50}$")) {

            fields.append(" lastName");

        }


        if (fields.length() > 0){

            throw new IllegalArgumentException("Error Message :" + String.format(errorMessage, fields.toString()));

        }


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

    }

打電話給


validate("", "1", "");

輸出:


Exception in thread "main" java.lang.IllegalArgumentException: Error Message :Invalid value for fields firstName middleName lastName from Input Parameter

    at Main.validate(Main.java:26)

    at Main.main(Main.java:5)

exit status 1

打電話給


validate("Andres", "1", "Martinez");

輸出:


Exception in thread "main" java.lang.IllegalArgumentException: Error Message :Invalid value for fields  middleName from Input Parameter

    at Main.validate(Main.java:26)

    at Main.main(Main.java:5)

exit status 1


查看完整回答
反對 回復 2022-10-20
  • 3 回答
  • 0 關注
  • 147 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號