2013-08-28 55 views
2

我做一些Java鍛鍊,試圖找出一種方法來對一個實例變量的範圍加以限制。如何在java中定義一個類的實例變量的範圍?

比如我構建了一個名爲Time類。它有3個實例變量,小時,分鐘和秒。

例如採取小時,它應該是23之間0至我有這個類中的一些方法來操縱小時變量。但我需要確保小時始終在0到23

我知道有一個方法,枚舉類型。像這樣

public enum hour { 
    0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 
    21, 22, 23 
} 

然後在Time類中插入小時類型變量。

但如果小時爲雙類型的變量,連續變量是什麼。它有它的上限和下限。我如何分隔連續變量?

+1

一小時不應該是一個double類型的變量。在一個小時內不作爲整體存儲的值將存儲一分鐘,然後存儲爲秒,然後存儲幾毫秒,等等。現在告訴我們,你爲什麼這樣做? –

回答

3

沒有編譯器保存的方式來設置限制。一種可能的(並且總是推薦的)方式是你使用一個私有變量並且在setter方法中檢查邊界並且如果邊界不正確則拋出一個RuntimeException。

例子:

public class Time { 
    private double hour; 

    public void setHour(double hour) { 
     if(hour < 0) { // and so on - i think you can imagine the logical expression 
      throw new IllegalArgumentException("hour "+hour+" is not valid."); 
     } 
     this.hour = hour; 
    } 
} 
+0

嗨Sorontur,你是對的,我知道錯誤提高方法。只是如果我有多個方法來操作類中的Time,那麼我需要在每個方法中拋出異常。我有點不耐煩。現在我知道異常處理是最好的方式,這是一個很好的編碼習慣,對吧? –

+0

是的,我認爲這是一個好主意:) – Sorontur

0

這是可能的(有人甚至認爲這是正確的方式)來HourMinuteSecond作爲模型類型,並應用適當的範圍在每種類型的檢查。

class Hour { 
    final int val; 

    Hour(int val) { 
     if (val < 0 || val > 23) { 
      throw new IllegalArgumentException("Out of range [0...23]: " + val); 
     } 
     this.val = val; 
    } 

    // ... 
} 
1

您可以使用bean validators

public class Time { 

@Min(0) @Max(23) 
private int hour; 

public void setHour(int hour) { 
    this.hour = hour; 
    } 
} 
+0

嗨yeforriak,謝謝你的建議。 Bean驗證器似乎是一個強大的工具。但是我沒有運行Java EE。我可以在Eclipse標準中使用它嗎? –

+0

@FriedrichPei你可以在Java SE上使用JSR-303,http://jcp.org/en/jsr/detail?id=303 – yeforriak

+0

我在這裏找到一個例子http://java.dzone.com/articles/bean-驗證製作,簡單 – yeforriak

相關問題