2011-02-04 63 views
3

我在Core java中遇到了問題。 考慮具有稱爲age的屬性的Employee類。預防未使用客戶端驗證的年齡爲負數

class Employee{   
     private int age;  
     public void setAge(int age);  
} 

我的問題是如何限制/防止setAge(INT年齡)方法,使得其只接受正數,它不應該允許負數,

Note: This has to be done without using client side validation.how do i achieve it using Java/server side Validation only.The validation for age attribute should be handled such that no exception is thrown

+0

毫無疑問,你不想拋出異常,你必須說出你想要發生的事情,那就是你應該實現的。當一位服務員接受你的訂單時,你是否開始了你不想要的飯菜? – 2011-02-04 15:21:45

+0

@彼得我明白。這在採訪中被問到了ysday.hence im發佈了同樣的問題,而intwer告訴我有一個laternate解決方案,以及他沒有透露 – Deepak 2011-02-04 15:22:44

回答

6

您只需驗證從用戶輸入的方法:

public void setAge(int age) { 
    if (age < 0) 
     throw new IllegalArgumentException("Age cannot be negative."); 
    // setter logic 
} 

如果您不能拋出一個異常,那麼你可能想嘗試:

public boolean setAge(int ageP) { 
    // if our age param is negative, set age to 0 
    if (ageP < 0) 
     this.age = 0 
    else 
     this.age = ageP; 
    // return true if value was good (greater than 1) 
    // and false if the value was bad 
    return ageP >= 0; 
} 

您可以返回該值是否有效。

0

雖然你說你不能拋出異常,但如果傳遞的值是負值,你不會真正說出你想要做什麼。

你必須將驗證失敗通過某種方式傳遞給調用者。

如果你想讓你的bean做到這一點,當你調用你的setAge方法時,它要麼拋出一個異常,要麼返回一個值。

那麼你的選擇是:

public void setAge(int age) { 
    if (age < 0) 
     throw new IllegalArgumentException("Age cannot be negative."); 
    this.age = age; 
} 

public boolean setAge(int age) { 
    if(age < 0) 
     return false; 

    this.age = age; 
    return true; 
} 

我猜你不想做第二個選項要麼因爲制定者通常不會返回值。

如果您不想執行其中任何一項,請在調用setAge方法之前在調用方中進行測試。

0

對於javabean驗證,您應該考慮使用框架,如JGoodies ValidationHibernate Validator

兩者都是非常好的框架。 Hibernate庫是一個JSR-303標準,它是基於註釋的。它與Spring很好地結合在一起。如果您也碰巧在Swing GUI中使用JavaBeans,則JGoodies驗證與JGoodies綁定很好地集成在一起。