[英]Java Class Constructor Parameters with range limits
我是Java新手,我問這個問題只是為了幫助我更好地理解OOP。
假設我正在定義一個名為Hour的新類。 要實例化此類,我們需要指定一個整數來指示此實例的小時。
Hour hr = new Hour(16); // this means to define an hour that indicates 4pm.
因此,當我們在這里定義Hour Class時,構造函數的參數應在[0,24]范圍內。 我們如何定義這樣的參數,如果指定了超出此范圍的參數,是否可以拋出錯誤?
謝謝。
您可以使用IllegalArgumentException 。
拋出以指示方法已被傳遞非法或不適當的參數。
例
public class Hour
{
Hour(int hour)
{
if(hour>=24 || hour<0)
{
throw new IllegalArgumentException("Hour should in the range of [0-23].");
}
}
...............
}
如果您希望編譯器捕獲錯誤,您可以定義小時的枚舉,然后將其用作Hour
的構造函數的參數。 但這可能會使Hour
課無用。
public class Hours {
_1, _2, _3, // etc.
}
public class Hour {
public Hour(Hours hour) { // no need for runtime check here, can not be wrong}
}
Hour hour = new Hour(Hours._3);
這種技術在這里可能不是最好的,但通常最好依賴於編譯時檢查而不是運行時檢查。
不幸的是,與Pascal和其他語言不同的Java不支持范圍類型。 但是,您可以使用其他技術。
最簡單的方法是檢查代碼中的值。
class Hour {
private final int h;
public Hour(int h) {
if (h < 0 || h >= 24) {
throw new IllegalArgumentException("There are only 24 hours");
}
this.h = h;
}
}
您還可以使用更復雜的技術。 看看java Validation API在這種情況下,您的代碼將如下所示:
class Hour {
@Max(23)
@Min(0)
private final int h;
public Hour(int h) {
this.h = h;
}
}
但是您必須使用此API的一個可用實現並調用它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.