2

我正在做一些 java 练习,并试图找出一种对实例变量的范围施加限制的方法。

例如,我构建了一个名为 Time 的类。它有 3 个实例变量,小时、分钟和秒。

以小时为例,它应该在 0 到 23 之间。我在这个类中有一些方法来操作小时变量。但我需要确保小时始终在 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 类中插入一个小时类型变量。

但是如果 hour 是一个 double 类型的变量,连续变量呢?它有上限和下限。如何分隔连续变量?

4

3 回答 3

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;
    }
}
于 2013-08-28T10:07:09.190 回答
1

您可以使用bean 验证器

public class Time {

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

public void setHour(int hour) {
    this.hour = hour;
   }
}
于 2013-08-28T10:56:18.797 回答
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;
   }

   // ...
}
于 2013-08-28T10:29:08.147 回答