是否有内置方法来定义接受特定范围内的值的字段/变量?我的意思是在compile-time解决它的一种方法。
例如,定义一个只取 1-10 之间值的双精度变量。
你能得到的最接近的是
1)为您的值范围创建一个 Enum,这就是 Enums 的用途。
public Enum MyVals {
ONE(1)
TWO(2)
...
private int val;
MyVals(int val) {
this.val = val;
}
}
看到这个。当然,这仅在值是离散的(即不是浮点数)时才有效
2)将字段设为私有并编写一个智能设置器,该设置器会在不可接受的值上爆炸。
public void setVal(int val) {
if (val < 0 || val > 10) throw....;
this.val = val;
}
不,因为在编译时无法知道您的软件逻辑是否会产生超出范围的值。并且在运行时,本机 sdk 不支持它的实现。但是,您可以包装类型类(例如,创建MyInteger
具有Integer
实例的类作为由类中的范围验证方法包装的成员MyInteger
)
虽然不是用于指定范围的编译时选项,但另一种方法是使用像Hibernate Validator这样的验证框架。您可以使用@Range(min=, max=) 之类的注释来注释您的字段。您使用验证器对象的validate 方法来验证您的对象。
与您所说的最接近的是枚举,它允许您指定一组固定值。没有办法声明一个整数,但限制它可以拥有的有效值。不过,您可以创建自己的类型并强制执行此类限制。
您可以将枚举用于此类集合。但我想你也想要一些有意义的值映射。在这种情况下,维护一个查找 HashTable,键为枚举,并为你想要的任何值。