2014-10-20 153 views
0

我是新來的,在Java中是新的。我在Java中的任務,這是一個問題:Getter和setter問題

類應該有以下幾種方法:

  1. 無參數的構造函數初始化名稱爲「未知」,尿素和蛋白質水平爲0.0並出血歷史價值爲假。
  2. 構造函數接收名稱和出血歷史的參數並將尿素水平和蛋白質水平初始化爲0.0。
  3. 吸氣劑對所有的實例變量
  4. 塞特斯所有的實例變量,以驗證爲 如下:

    • 名稱不能爲空

    • 尿素水平必須在0到1之間10,包括

    • 蛋白質水平必須介於0和150之間,包括

如果任何的制定者傳遞的值是無效的,那麼不改變實例變量的值,並返回false。

這是可變的實例:

public class Patient { 

    private String name; 
    private boolean bleedingHistory = true; 

    private double ureaLevel; 
    private double proLevel; 

所以我的問題是怎麼回事實例變量上面如果輸入值是不正確的。

+0

首先,您需要在構造函數之外聲明您的字段,否則它們只會對構造函數可見 – 2014-10-20 05:27:30

+2

首先,這些不是實例變量,需要在類級別定義實例變量。請看[Understanding Class Members](http://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html) – MadProgrammer 2014-10-20 05:27:48

+0

此外,如果傳遞給getter的值無效,則不應該是任何方式修改實例字段,所以不應該有一個問題... – MadProgrammer 2014-10-20 05:30:23

回答

2

這很簡單,只要確保你的設置者有if語句來驗證輸入。如果驗證失敗,則根本不要更改變量;相反,拋出一個IllegalArgumentException讓調用者知道名稱沒有改變。 (來源:@ADTC)

例如,這裏是病人的名字二傳手:

public void setName(String newName) throws IllegalArgumentException 
{ 
    if(newName != null && !newName.isEmpty()) 
    { 
     this.name = newName; 
    } 
    else 
    { 
     throw new IllegalArgumentException(); 
    } 
} 

什麼if語句的評估是:「如果newNamenullnewName不是爲空,那麼我們將用newName替換this.name,否則我們會拋出new IllegalArgumentException()。「

注意如何,如果if語句的計算結果爲true,變量name被替換newName,但是,如果計算結果爲false,我們拋出一個IllegalArgumentException。如果您要在代碼中調用此方法,則應該在try-catch語句中調用該方法,如下所示:

try 
{ 
    setName("John Doe"); 
} 
catch(IllegalArgumentException e) 
{ 
    //Name was not changed. Either it was null, or it was empty. 
} 
+1

實際上setter應該拋出['IllegalArgumentException']( http://docs.oracle.com/javase/7/docs/api/java/lang/IllegalArgumentException.html),當驗證失敗時,調用者可以知道驗證狀態。否則,程序將繼續進行,假設值已設置,但實際上沒有設置。 – ADTC 2014-10-20 05:49:13

+0

@ADTC偉大的一點!我會看看我是否可以將其應用到我的回答中 – 2014-10-20 05:59:33

+0

如果您想獲得所有OCD,那麼您還可以檢查傳入的param是否與類變量中的內容不匹配。 IE瀏覽器。如果它是相同的不改變它。有些事像...... ... && n if(newName!= null &&!newName.isEmpty()&&!newName.equals(name)){ – 2014-10-20 06:03:48