我正在做一些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类中插入一个小时类型变量。
但是如果小时是双重型变量,连续变量怎么办?它有上限和下限。如何划分连续变量?
答案 0 :(得分: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;
}
}
答案 1 :(得分:1)
您可以使用bean validators
public class Time {
@Min(0) @Max(23)
private int hour;
public void setHour(int hour) {
this.hour = hour;
}
}
答案 2 :(得分:0)
有可能(有些人甚至会说这是正确的方法)将Hour
,Minute
和Second
建模为类型,并在每种类型中应用适当的范围检查。
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;
}
// ...
}