2015-10-28 151 views
0

我正試圖編寫一個類,在用戶輸入實例變量的數據時進行數據驗證。這個類中只有構造函數沒有主要的方法。用戶輸入在測試工具中完成。我的問題是我是否像在此處所做的那樣在set方法中執行異常處理?或者我應該試着去捕捉其中一個構造函數?哪裏可以拋出異常句柄?

public class Customer 
{ 
    private String fName; 
    private String lName; 
    private String custTIN; 
    private int custNbr; 
    private int custHonor; 

    public Customer(String first, String last, String tin, int cust, int honor) 
    { 
    setFName(first); 
    setLName(last); 
    setCustTIN(tin); 
    setCustNbr(cust); 
    setCustHonor(honor); 
    } 

    public Customer(String first, String last, int cust, String tin) 
    { 
    setFName(first); 
    setLName(last); 
    setCustTIN(tin); 
    setCustNbr(cust); 
    } 
    /************************************************************************************************************** 
    * Set & Get Methods 
    **************************************************************************************************************/ 

    public void setFName(String first) throws InvalidCustomerException 
    { 
    if(first == "null") 
    { 
    throw new InvalidCustomerException("You did not enter any data"); 
    } 
     else 
     { 
     fName = first; 
     } 
    } 

    public void setLName(String last) 
    { 
    lName = last; 
    } 

    public void setCustTIN(String tin) 
    { 
    custTIN = tin; 
    } 

    public void setCustNbr(int cust) 
    { 
    custNbr = cust; 
    } 

    public void setCustHonor(int honor) 
    { 
    custHonor = honor; 
    } 

    public String getFName() 
    { 
    return fName; 
    } 

    public String getLName() 
    { 
    return lName; 
    } 

    public String getCustTIN() 
    { 
    return custTIN; 
    } 

    public int getCustNbr() 
    { 
    return custNbr; 
    } 

    public int getCustHonor() 
    { 
    return custHonor; 
    } 

    /**************************************************************************************************************** 
    * toString Methods 
    ****************************************************************************************************************/ 
    //public String createSalutaion() 
    { 
    }//end createSalutation() 


    public String toString() 
    { 
    return String.format ("%d %s %s, Customer number %d, with Tax Id: %s", getCustHonor(), getFName(), getLName(), getCustNbr(), getCustTIN()); 
    }//end toString() 

} 

這裏是我的異常類.....

/** 
* Auto Generated Java Class. 
*/ 
public class InvalidCustomerException extends Exception 
{ 
    private String inputValue = "null"; 

    public InvalidCustomerException(String message) 
    { 
    super(message); 
    } 

    public InvalidCustomerException(String message, Throwable cause) 
    { 
    super(message, 
     cause); 
    } 

    public InvalidCustomerException(String message, String inputValue) 
    { 

    } 

    public InvalidCustomerException(String message, String inputValue, Throwable cause) 
    { 

    } 


} // end of invalid customer exception 
+0

這取決於你與你建立的合同對象。在大多數情況下,我可能會在兩個地方做一些驗證,所以如果對象期待一個數字,我會確保用戶輸入的是一個數字,但對象可能會執行它自己的驗證以確保它是一個數字素數與給定範圍 – MadProgrammer

+0

作爲一個說明,你的意思是'== null'?如果沒有,(1)這是一個非常奇怪的約束,(2)你需要使用'equals'。 – chrylis

回答

0

就個人而言,我喜歡以確保壞數據從來沒有在第一時間被傳遞,與試副漁獲物和錯誤的投擲(IllegalArgumentException,一般來說,因爲它畢竟)在收集傳遞給構造函數的數據。

但是要回答你的問題,最好儘快攔截錯誤,以避免未定義的行爲或垃圾在後來的函數中依賴於輸入數據是正確的,而且這是事物在這裏,重新提交輸入的能力已經搞砸了。但是,由於您不直接設置實例變量,因此您的設置運行良好,只要您可以從用戶那裏獲取數據,以糾正所得到的錯誤。